Ian Romanick [Fri, 14 May 2010 19:41:22 +0000 (12:41 -0700)]
Reimplement ir_dead_code_visitor using ir_hierarchical_vistor
The output of all test cases was verified to be the same using diff.
Ian Romanick [Fri, 14 May 2010 19:39:23 +0000 (12:39 -0700)]
Add ir_hierarchical_visitor base class and associated infrastructure
This type of visitor should eventually replace all or almost all
current uses of ir_visitor.
Ian Romanick [Tue, 11 May 2010 00:44:57 +0000 (17:44 -0700)]
Replace find_dead_code with visit_exec_list
find_dead_code appears to be an open-coded version of visit_exec_list
that was implemented first.
Ian Romanick [Sat, 15 May 2010 00:36:00 +0000 (17:36 -0700)]
Use ir_rvalue::variable_referenced instead of open-coding it
Ian Romanick [Sat, 15 May 2010 00:35:42 +0000 (17:35 -0700)]
Add ir_rvalue::variable_referenced
Kenneth Graunke [Fri, 30 Apr 2010 22:20:06 +0000 (15:20 -0700)]
Refresh autogenerated builtin_function.cpp.
Kenneth Graunke [Tue, 4 May 2010 05:12:35 +0000 (22:12 -0700)]
Implement "tan" builtin.
Kenneth Graunke [Tue, 4 May 2010 05:11:17 +0000 (22:11 -0700)]
Implement "sin" and "cos" builtins via new expression operators.
Kenneth Graunke [Tue, 4 May 2010 04:29:01 +0000 (21:29 -0700)]
Implement "cross" builtin.
Kenneth Graunke [Tue, 4 May 2010 03:59:09 +0000 (20:59 -0700)]
Implement "fract" builtin.
Kenneth Graunke [Tue, 4 May 2010 03:05:57 +0000 (20:05 -0700)]
Implement "sign" builtin via a new expression operator.
Kenneth Graunke [Tue, 4 May 2010 02:10:04 +0000 (19:10 -0700)]
Implement "smoothstep" builtin.
Kenneth Graunke [Fri, 30 Apr 2010 22:18:07 +0000 (15:18 -0700)]
Implement "step" builtin.
Kenneth Graunke [Mon, 3 May 2010 21:39:03 +0000 (14:39 -0700)]
Integrate generate_builtins.pl into the build process.
make will now regenerate builtin_function.cpp whenever you
change/add/remove files in the builtins/* folders.
Kenneth Graunke [Thu, 29 Apr 2010 06:01:33 +0000 (23:01 -0700)]
Replace old builtin_function.cpp with new autogenerated one.
Kenneth Graunke [Thu, 29 Apr 2010 06:00:43 +0000 (23:00 -0700)]
Add a perl script to generate builtin_function.cpp.
Usage: ./builtins/tools/generate_builtins.pl > builtin_function.cpp
Kenneth Graunke [Mon, 3 May 2010 09:40:10 +0000 (02:40 -0700)]
Fix bogus expression typing in various builtins.
Kenneth Graunke [Thu, 29 Apr 2010 05:57:47 +0000 (22:57 -0700)]
Initial commit of IR for builtins.
These were all generated by Eric's existing builtin_functions.cpp; I split
the uvec* signatures out of 110 into the 130 folder.
Kenneth Graunke [Thu, 29 Apr 2010 06:17:58 +0000 (23:17 -0700)]
ir_reader: Set function signatures as defined.
Eric Anholt [Thu, 6 May 2010 19:57:23 +0000 (12:57 -0700)]
FS gl_FragCoord and and gl_FrontFacing are FS ins, not outs.
Ian Romanick [Fri, 14 May 2010 23:06:41 +0000 (16:06 -0700)]
Fix function call parameter printer to omit extraneous leading comma
The output of all test cases was verified to be the same using diff.
Ian Romanick [Tue, 11 May 2010 00:42:05 +0000 (17:42 -0700)]
Replace many uses of foreach_list with foreach_list_typed
Ian Romanick [Tue, 11 May 2010 00:40:41 +0000 (17:40 -0700)]
exec_list: Add foreach_list_typed and foreach_list_typed_const
These variations are parameterized by the type of the nodes in the
list. This enables skipping the explicit usage of exec_node_data in
the loop body.
Ian Romanick [Mon, 10 May 2010 18:17:53 +0000 (11:17 -0700)]
Convert ast_node use of simple_node to exec_list and exec_node
Ian Romanick [Mon, 10 May 2010 18:17:23 +0000 (11:17 -0700)]
exec_list: Add simpler exec_list for-each macros
Ian Romanick [Mon, 10 May 2010 18:16:24 +0000 (11:16 -0700)]
exec_list: Add macros to get ptr to structure containing a node
This has some ugly hackery to work-around C++ fail. I have
emperically determined that it works in all the cases that matter.
Ian Romanick [Mon, 10 May 2010 18:10:26 +0000 (11:10 -0700)]
Loop bodies, then-statements, and else-statements are not lists
The statement making up a loop body, a then-statement, or an
else-statement are single nodes. If the statement is a block, the
single node will be an ast_compound_statement. There is no need to
loop at the top level when processing these statements.
Ian Romanick [Mon, 10 May 2010 17:56:03 +0000 (10:56 -0700)]
Remove unnecessary include of simple_list.h
Ian Romanick [Mon, 10 May 2010 17:47:14 +0000 (10:47 -0700)]
Store AST function call parameters in expressions
Previously the list of function call parameters was stored as a
circular list in ast_expression::subexpressions[1]. They are now
stored as a regular list in ast_expression::expressions.
Eric Anholt [Wed, 5 May 2010 18:45:30 +0000 (11:45 -0700)]
Move optimization pass prototypes to a single header.
Eric Anholt [Wed, 5 May 2010 17:37:25 +0000 (10:37 -0700)]
ir_dead_code_local: Remove redundant assignments within basic blocks.
This cleans up a bunch of junk code in some of the GLSL parser tests,
and could potentially help real-world too (particularly after copy
propagation has happened).
Eric Anholt [Wed, 5 May 2010 18:07:21 +0000 (11:07 -0700)]
ir_visit_tree: Make sure we visit dereference targets, too.
Found this with the local dead code pass, which never saw variable
dereferences occurring.
Eric Anholt [Wed, 5 May 2010 16:38:09 +0000 (09:38 -0700)]
ir_copy_propagation: Fix up the doxygen about the file.
Eric Anholt [Wed, 5 May 2010 16:31:53 +0000 (09:31 -0700)]
ir_copy_propagation: Return true if we optimized out any assignments.
This may trigger other optimization phases to make more progress themselves.
Eric Anholt [Wed, 5 May 2010 16:26:46 +0000 (09:26 -0700)]
ir_copy_propagation: Handle swizzles and array derefs on LHS of assign.
This improves the ACP to not get cleared when more complicated assignments
occur, cleaning up more redundant copies in programs.
Eric Anholt [Tue, 4 May 2010 20:04:40 +0000 (13:04 -0700)]
ir_copy_propagation: New pass to rewrite dereferences to avoid copies.
This is pretty basic. Right now it only handles pure assignments --
same type on each side, no swizzling, and only within basic blocks.
Eric Anholt [Tue, 4 May 2010 00:08:01 +0000 (17:08 -0700)]
ir_to_mesa.cpp: Fix missing types on some ir_swizzles.
Debugging this took forever as I only looked at constructors in ir.cpp
to find who wasn't setting up ->type. I dislike hiding code (as
opposed to prototypes and definitions) in C++ header files, but in
this case I have only myself to blame.
Eric Anholt [Mon, 3 May 2010 18:41:00 +0000 (11:41 -0700)]
Remove the pedantic C junk.
Mesa doesn't use pedantic ANSI C89, so I have no idea why we would.
Eric Anholt [Fri, 30 Apr 2010 01:00:33 +0000 (18:00 -0700)]
Store warnings and errors in a parser state infolog.
Cleans up compile warning about unused state in _mesa_glsl_warning. We
would want infolog handling roughly like this anyway.
Eric Anholt [Fri, 30 Apr 2010 00:57:28 +0000 (17:57 -0700)]
Quiet warnings about ir_shader not being handled in places it's not needed.
Eric Anholt [Fri, 30 Apr 2010 00:54:52 +0000 (17:54 -0700)]
Use the AM_SILENT_RULES when available.
Eric Anholt [Fri, 30 Apr 2010 00:53:26 +0000 (17:53 -0700)]
glsl_lexer: Quiet warning about unused unput().
Ian Romanick [Mon, 3 May 2010 17:15:02 +0000 (10:15 -0700)]
Merge branch 'fixes'
Kenneth Graunke [Thu, 29 Apr 2010 06:18:25 +0000 (23:18 -0700)]
Use %p rather than %08x when printing pointers to fix compile.
Kenneth Graunke [Sat, 1 May 2010 07:31:35 +0000 (00:31 -0700)]
Fix ir_return cloning to actually use the cloned subexpression.
This caused a nasty bug where the function inliner would create new
variables for each of the formal parameters, but the body would still
reference the old copies.
This was highly visible since the dead code eliminator (rightly) removed
the new declarations, leading to printed IR that referenced non-existent
variable names.
Kenneth Graunke [Sat, 1 May 2010 06:38:50 +0000 (23:38 -0700)]
Fix incorrect comments in function inliner.
Eric Anholt [Thu, 29 Apr 2010 20:54:19 +0000 (13:54 -0700)]
ir_dead_code: Fix segfault on handling a return statement with no value.
Ian Romanick [Wed, 28 Apr 2010 20:14:53 +0000 (13:14 -0700)]
Track and print user defined structure types
Ian Romanick [Wed, 28 Apr 2010 20:04:15 +0000 (13:04 -0700)]
IR print visitor: Move logic for printing the whole program to _mesa_print_ir
Ian Romanick [Wed, 28 Apr 2010 19:01:40 +0000 (12:01 -0700)]
IR print visitor: Just print the name of structures
Treat structure types like other non-array types. We'll have to print
the structure defintion elsewhere.
Eric Anholt [Mon, 26 Apr 2010 22:02:40 +0000 (15:02 -0700)]
ir_function_inlining: Handle inlining of structure dereferences.
Eric Anholt [Mon, 26 Apr 2010 22:01:50 +0000 (15:01 -0700)]
Correctly handle remapping of array dereferences if ->var is a variable.
Ian Romanick [Fri, 23 Apr 2010 22:55:19 +0000 (15:55 -0700)]
Begin handling some varieties of invalid declarations
Ian Romanick [Fri, 23 Apr 2010 20:24:08 +0000 (13:24 -0700)]
Reject conflicting struct declarations, generate struct constructor
Ian Romanick [Fri, 23 Apr 2010 20:21:22 +0000 (13:21 -0700)]
glsl_type::generate_constructor_prototype now generates the function too
Also, change the name of the method to generate_constructor.
Ian Romanick [Wed, 21 Apr 2010 21:33:34 +0000 (14:33 -0700)]
Always return a value from ast_type_specifier::hir
Ian Romanick [Wed, 21 Apr 2010 19:13:48 +0000 (12:13 -0700)]
Support structures in glsl_type::generate_constructor_prototype
Ian Romanick [Wed, 21 Apr 2010 18:54:02 +0000 (11:54 -0700)]
Implement structures and arrays in ir_dereference::is_lvalue
Ian Romanick [Tue, 20 Apr 2010 23:49:03 +0000 (16:49 -0700)]
Ensure that structure fields have non-NULL types
Ian Romanick [Tue, 20 Apr 2010 23:48:24 +0000 (16:48 -0700)]
Ensure that anonymous structures have non-NULL names
Ian Romanick [Mon, 19 Apr 2010 22:41:23 +0000 (15:41 -0700)]
Convert structure field dereferences to HIR
Ian Romanick [Mon, 19 Apr 2010 22:40:49 +0000 (15:40 -0700)]
Add ir_dereference constructor for structure field dereferences
Ian Romanick [Mon, 19 Apr 2010 22:40:01 +0000 (15:40 -0700)]
Add glsl_type::field_type
Query the type of a structure field
Ian Romanick [Mon, 19 Apr 2010 22:13:15 +0000 (15:13 -0700)]
Begin converting structure definitions to IR
Ian Romanick [Mon, 19 Apr 2010 22:11:31 +0000 (15:11 -0700)]
Use IDENTIFIER instead of TYPE_NAME for structure names
Since there is no track of which names are structure names during parsing,
TYPE_NAME cannot be produced by the lexer. Use IDENTIFIER and let the AST
processor sort it out.
Kenneth Graunke [Wed, 28 Apr 2010 20:16:31 +0000 (13:16 -0700)]
ir_reader: Slightly better error message when failing to read swizzles.
Kenneth Graunke [Wed, 28 Apr 2010 19:58:31 +0000 (12:58 -0700)]
ir_reader: Don't print out the S-Expression.
It's no longer useful for debugging.
Kenneth Graunke [Wed, 28 Apr 2010 19:54:21 +0000 (12:54 -0700)]
ir_reader: Read function calls.
Kenneth Graunke [Wed, 28 Apr 2010 19:45:18 +0000 (12:45 -0700)]
ir_reader: Replace function prototypes with the definition.
Previously, we just created a new one, which was wrong.
Kenneth Graunke [Thu, 22 Apr 2010 06:46:22 +0000 (23:46 -0700)]
ir_reader: Fix incorrect error message for expressions.
Kenneth Graunke [Thu, 22 Apr 2010 06:23:23 +0000 (23:23 -0700)]
Make ir_read_error print out the given S-Expression, for context.
Kenneth Graunke [Thu, 22 Apr 2010 06:15:08 +0000 (23:15 -0700)]
ir_reader: Fix for swizzles.
Kenneth Graunke [Thu, 22 Apr 2010 01:14:06 +0000 (18:14 -0700)]
ir_reader: Preliminary work toward reading functions.
Kenneth Graunke [Thu, 22 Apr 2010 00:52:36 +0000 (17:52 -0700)]
ir_reader: Perform a preliminary pass to scan for function prototypes.
Kenneth Graunke [Thu, 22 Apr 2010 00:50:16 +0000 (17:50 -0700)]
ir_reader: Don't initialize globals, builtins, or constructors.
All of these are currently emitted as part of the IR, so by initializing
them, we actually end up with two copies. For constructors, we may
eventually wish to avoid emitting them as part of the IR output.
Kenneth Graunke [Wed, 21 Apr 2010 22:47:34 +0000 (15:47 -0700)]
Make ir_read_error set state->error.
Kenneth Graunke [Mon, 12 Apr 2010 23:02:48 +0000 (16:02 -0700)]
ir_reader: Add support for "break" and "continue" in loops.
Includes threading the ir_loop * context through various functions.
Kenneth Graunke [Mon, 12 Apr 2010 22:48:27 +0000 (15:48 -0700)]
ir_reader: Add initial loop support; doesn't yet support break/continue.
Kenneth Graunke [Mon, 12 Apr 2010 21:27:39 +0000 (14:27 -0700)]
ir_reader: Add support for reading (var_ref ...) and (array_ref ...)
Kenneth Graunke [Mon, 12 Apr 2010 21:25:41 +0000 (14:25 -0700)]
ir_reader: rvalues are instructions too!
Kenneth Graunke [Sat, 10 Apr 2010 08:45:08 +0000 (01:45 -0700)]
ir_reader: Add support for reading conditionals: (if ...)
Kenneth Graunke [Sat, 10 Apr 2010 08:06:44 +0000 (01:06 -0700)]
ir_reader: Add support for reading array types.
Also, constify glsl_type pointers; this was necessary to use
glsl_type::get_array_instance.
Kenneth Graunke [Sat, 10 Apr 2010 00:56:22 +0000 (17:56 -0700)]
ir_reader: Add support for reading (return ...)
Kenneth Graunke [Sat, 10 Apr 2010 00:40:51 +0000 (17:40 -0700)]
ir_reader: Add support for reading variable declarations.
It also now reads a list of instructions, as it should, rather than a
single rvalue.
Kenneth Graunke [Thu, 8 Apr 2010 00:24:44 +0000 (17:24 -0700)]
Partial IR reader.
Currently reads assignments, constants, expressions, and swizzles.
Kenneth Graunke [Wed, 7 Apr 2010 22:16:20 +0000 (15:16 -0700)]
Set language_version to 130 (the max currently supported) when reading IR.
This is necessary so _mesa_glsl_initialize_types can create appropriate
glsl_types and add them to the symbol table.
In the future, we'll want to set it to the max GLSL version supported by
the current driver.
Kenneth Graunke [Wed, 7 Apr 2010 21:38:03 +0000 (14:38 -0700)]
Add stub ir_reader and new 'i' mode for reading IR rather than GLSL.
Kenneth Graunke [Wed, 7 Apr 2010 20:39:34 +0000 (13:39 -0700)]
Add a simple S-Expression reader and printer.
Kenneth Graunke [Thu, 22 Apr 2010 06:47:07 +0000 (23:47 -0700)]
Use "neg" when printing/reading unary negation rather than "-".
"-" is now only used for binary subtraction.
Kenneth Graunke [Thu, 8 Apr 2010 00:18:29 +0000 (17:18 -0700)]
Move array of operator strings out of ir_print_visitor.cpp.
Also implement a reverse-lookup function for use in the IR reader.
Kenneth Graunke [Wed, 28 Apr 2010 19:44:24 +0000 (12:44 -0700)]
Factor out parameter list replacement for later reuse.
Kenneth Graunke [Wed, 28 Apr 2010 19:04:23 +0000 (12:04 -0700)]
Factor out parameter list matching from ast_function::hir for later reuse.
Unfortunately, we still have two kinds of matching - one, with implicit
conversions (for use in calls) and another without them (for finding a
prototype to overwrite when processing a function body). This commit
does not attempt to coalesce the two.
Kenneth Graunke [Wed, 28 Apr 2010 18:49:12 +0000 (11:49 -0700)]
Factor out qualifier checking code for later reuse.
Kenneth Graunke [Thu, 22 Apr 2010 07:44:12 +0000 (00:44 -0700)]
ir_print_visitor: Re-parenthesize ir_call output.
Kenneth Graunke [Thu, 22 Apr 2010 00:28:46 +0000 (17:28 -0700)]
ir_print_visitor: Print return type of ir_function_signatures.
Kenneth Graunke [Mon, 12 Apr 2010 22:46:10 +0000 (15:46 -0700)]
ir_print_visitor: Print (constant bool (1)) instead of "true"
It might be better to simply handle "true" in the reader, but since
booleans normally aren't printed as "true" or "false", we may as well go
for consistency.
Kenneth Graunke [Mon, 12 Apr 2010 21:52:37 +0000 (14:52 -0700)]
ir_print_visitor: Remove unnecessary parens around expression operands.
Kenneth Graunke [Sat, 10 Apr 2010 00:59:51 +0000 (17:59 -0700)]
ir_print_visitor: Remove unnecessary parens around array size in types.
Kenneth Graunke [Sat, 10 Apr 2010 00:32:14 +0000 (17:32 -0700)]
ir_print_visitor: Fix unclosed parenthesis in (call...
Kenneth Graunke [Sat, 10 Apr 2010 00:29:47 +0000 (17:29 -0700)]
ir_print_visitor: Fix unclosed parenthesis in (assign ...
Also remove useless parens around subexpressions.