Commit Graph

9561 Commits

Author SHA1 Message Date
Bill Currie 4f70b48370 Add a function to check if two defs overlap.
Very useful for alias handling :)
2012-12-10 13:23:45 +09:00
Bill Currie fa45ab842f Make the reaching defs dot dump optional. 2012-12-10 12:17:20 +09:00
Bill Currie e4dd86c36b Calculate reaching defs. 2012-12-09 22:37:59 +09:00
Bill Currie 6473951daa Make the set notation more correct.
The empty set is now {}, the set of everything is now {...} and the rest
now have {} around the members.
2012-12-09 22:17:55 +09:00
Bill Currie f3adb70ee4 Move the var def/use calculation into flow_build_vars(). 2012-12-09 21:22:57 +09:00
Bill Currie 2bc3a36126 Split out the statement array building. 2012-12-09 21:12:53 +09:00
Bill Currie 17a2f86a22 Correct some comments. 2012-12-09 21:12:33 +09:00
Bill Currie 1c99cf50da Clean up the flow api a little. 2012-12-09 20:50:53 +09:00
Bill Currie 054d902d3a Document alias defs.
The diagram showing the basics of how alias defs work is in a spearate file
because it created to much clutter in the header file.
2012-12-09 19:43:12 +09:00
Bill Currie 061e2be5d4 Re-write the set testing code.
Getting everything right with an enum proved to be too difficult if not
impossible. Also use better tests for equivalence and intersection.

Many more tests have been added. All pass :)
2012-12-09 13:52:48 +09:00
Bill Currie 94e804d786 Make some more set_test fixes.
Two inverted sets can never be disjoint.
2012-12-07 22:25:36 +09:00
Bill Currie 56956fc370 Rewrite the intersection tests.
The early bailout proved to be difficult to get right, so don't bother.
2012-12-07 22:16:51 +09:00
Bill Currie 98c9e4f8c0 White space. 2012-12-07 22:16:22 +09:00
Bill Currie f3328a61c7 More tests and update a comment. 2012-12-07 22:16:07 +09:00
Bill Currie b053edee17 Fix the handling of size in set_expand.
It was correct for set_add, but not for other ops :/ (out by 1)
2012-12-07 20:44:09 +09:00
Bill Currie 770a40cef0 Add a bunch more tests.
Even found some bugs :)
2012-12-07 20:43:11 +09:00
Bill Currie dbcf8f3774 Make the default map size smaller.
256 is pretty big. Now, set_t is always 32 bytes, giving 64 members for 64
bit machines and (probably) 128 members for 32 bit machines.
2012-12-07 20:41:23 +09:00
Bill Currie 39920a4ea7 Fix the type when converting set of everything to string. 2012-12-07 19:35:37 +09:00
Bill Currie c76231ca30 Add some very basic tests for sets.
They test creation, empty, everything and inversion. Already found a bug
(typo: "everythign" :P)
2012-12-07 19:34:34 +09:00
Bill Currie e0c92b6089 Rename set_iter_t's member to value.
Makes more sense now that the membership of the value depends on the
inversion of the set.
2012-12-06 21:11:38 +09:00
Bill Currie eb8fd55677 Move set.c into libQFutil.
Also move the ALLOC/FREE macros from qfcc.h to QF/alloc.h (needed to for
set.c).

Both modules are more generally useful than just for qfcc (eg, set
builtins for ruamoko).
2012-12-06 20:52:53 +09:00
Bill Currie b28ac6672b Add support for set of everything, and a lot of docs.
Set of everything is implemented by inverting the meaning of bits in the
bitmap: 1 becomes non-member, 0 member. This means that set_size and
set_first/set_next become inverted and represent non-members as counting
members becomes impossible :)
2012-12-06 19:32:31 +09:00
Bill Currie 215856045f Clean up some bitrot in docstrap.
The configuration file had been renamed.

Also, mention docstrap in INSTALL and make the documentaion configure check
for the required tools (doxygen, dot (graphvis), mscgen, and transfig).
2012-12-06 11:50:29 +09:00
Bill Currie b6ae9867c2 Fully connect temps and their aliases. 2012-12-06 09:40:16 +09:00
Bill Currie 34e3ac1468 Fix jumpb's operand types.
Aliasing the jump table to an integer broke statement_get_targetlist with
the new alias def handling, and was really wrong anyway. I probably did
that due to being fed up with things and wanting to get qfcc working again
rather than spending time getting jumpb right.
2012-12-05 22:20:55 +09:00
Bill Currie c06cd8fcc0 Cast constants at compile time.
This takes care of the internal error due to aliasing values.
2012-12-05 22:19:22 +09:00
Bill Currie f7e174f3ba Be more clear about integral expression types.
Is that 7 a short? int? unsigned?
2012-12-05 22:18:13 +09:00
Bill Currie 7071a46936 Make convert_value create a new value.
It operating in-place proved to be troublesome.
2012-12-05 22:16:08 +09:00
Bill Currie a099847026 Do a little bit of const correctness for type.[ch]
It's only the beginning :/
2012-12-05 22:15:19 +09:00
Bill Currie fea806c155 Be more careful with boolean expressions.
Either true_list or false_list may be null.
2012-12-05 20:12:57 +09:00
Bill Currie 08b27efe33 Nuke the return type flow calculations.
They've proven to be unnecessary with the recent symbol/def changes.
2012-12-05 19:56:10 +09:00
Bill Currie 3f3b501c58 Move flowvar/deflabel from symbol_t to def_t.
With the need to handle aliasing in the optimizer, it has become apparent
that having the flow data attached to symbols is not nearly as useful as
having it attached to defs (which are views of the actual variables).

This also involves a bit of a cleanup of operand types: op_pointer and
op_alias are gone (this seems to greatly simplify the optimizer)

There is a bit of a problem with enums in switch statements, but this might
actually be a sign that something is not quite right in the switch code
(other than enums not being recognized as ints for jump table
optimization).
2012-12-05 19:47:22 +09:00
Bill Currie 3bb8b1b9d2 Make it easy to print symbol types. 2012-12-05 19:45:16 +09:00
Bill Currie 2904c619c1 Don't bother creating an alias for a def of the same type. 2012-12-05 19:43:27 +09:00
Bill Currie cc88202f8c Fix function.h's doxgygen grouping. 2012-12-05 16:01:28 +09:00
Bill Currie 7ccfd7b9e0 Fix the wrong space for static vars.
Turns out there was only one place to fix (for qc, anyway: I don't have
tests for qp yet). func-static now passes :)

Hmm, how to test for static var naming... (not implemented yet)
2012-12-04 14:25:06 +09:00
Bill Currie 6074a6648f Do some sanity checking on storage class and defspace type.
Params and locals in virtual spaces, static vars in backed. Otherwise,
whatever (for now). Now func-static.r aborts :)
2012-12-04 14:18:17 +09:00
Bill Currie 0585471723 Make defspaces typed.
Simply "backed" and "virutal". Backed spaces have memory allocated to them
while virtual spaces do not. Virtual spaces are intended for local
variables and entity fields.
2012-12-04 14:16:52 +09:00
Bill Currie c7b2996798 Use the correct algorithm for the new defspace size.
While the result was correct, space->size >= space->size is always true and
thus grow_space would unconditionally increase the defspace's size.
2012-12-04 14:06:36 +09:00
Bill Currie d340aac2eb Fix the bugs marked in defspace.h
Now size is checked properly for defspace_free_loc and defspace_alloc_loc,
and defspace_alloc_loc check's grow()'s return value.
2012-12-04 13:40:00 +09:00
Bill Currie f7bf05034f Remove func-static from XFAIL_TESTS.
I realized that's not the way it's meant to be used, and it /is/ I bug I
want fixed before release, so... :)
2012-12-04 13:27:39 +09:00
Bill Currie 98a0afa38f Add and use FREE() to complement ALLOC().
Now it will be easy to test memory access with valgrind (just compile with
DEBUG_QFCC_MEMORY defined).
2012-12-04 13:23:31 +09:00
Bill Currie 0872961269 Do a little bit of cleanup. 2012-12-04 12:48:52 +09:00
Bill Currie 1eb3349510 Add a test for function local static variables.
It turns out they're not getting allocated properly (they're put in the
function's locals defspace rather than near data), but fixing it proved a
little more problematic than expected, so the test is marked as XFAIL for
now to remind me to fix it.
2012-12-03 16:27:31 +09:00
Bill Currie 7412a45c65 Attach alias defs to their base def.
With this, alias defs become singletons based on the def they alias and the
type and offset of the alias. Thus, the removal of the free_def call in
emit.c.
2012-12-03 12:40:00 +09:00
Bill Currie 919ea8192a Make alias_def take an offset.
alias_def now always creates an offset def (though the usual case has an
offset of 0). The if the alias escapes the bounds of the base def, an
internal error will be generated.
2012-12-03 11:50:26 +09:00
Bill Currie 9d0332ae30 Make alaising a def to a larger type an internal error.
It really doesn't seem wise to allow the compiler to do so as it would
overwrite unrelated defs. The only time such a thing is valid is the return
statement (silly vm design), and that's read-only.
2012-12-03 11:38:55 +09:00
Bill Currie 9ca5a9e86c Make aliasing an alias def an internal error.
I haven't seen the bug message show up, so it seems safe, and is probably a
good idea with what I have in mind.
2012-12-03 11:36:14 +09:00
Bill Currie cd64c0ad9b Document defspace.h 2012-12-02 22:04:54 +09:00
Bill Currie 3ecb7e8805 Mised some st_->sc_ changes.
Hiding in a comment in a header, sneaky rats ;)
2012-12-02 22:00:07 +09:00