Kenneth Graunke
e4afc64290
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.
15 jaren geleden
Kenneth Graunke
f6c90d8b34
ir_reader: Set function signatures as defined.
15 jaren geleden
Eric Anholt
c05bc5b7cc
FS gl_FragCoord and and gl_FrontFacing are FS ins, not outs.
15 jaren geleden
Ian Romanick
2384937835
Fix function call parameter printer to omit extraneous leading comma
The output of all test cases was verified to be the same using diff.
15 jaren geleden
Ian Romanick
2b97dc657a
Replace many uses of foreach_list with foreach_list_typed
15 jaren geleden
Ian Romanick
4cfbad9e4d
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.
15 jaren geleden
Ian Romanick
304ea90233
Convert ast_node use of simple_node to exec_list and exec_node
15 jaren geleden
Ian Romanick
752c905b8c
exec_list: Add simpler exec_list for-each macros
15 jaren geleden
Ian Romanick
43bfc2b6b5
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.
15 jaren geleden
Ian Romanick
4f9d72fa9e
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.
15 jaren geleden
Ian Romanick
f4e06981cc
Remove unnecessary include of simple_list.h
15 jaren geleden
Ian Romanick
3521f0bdd5
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.
15 jaren geleden
Eric Anholt
bdd9b1f3ff
Move optimization pass prototypes to a single header.
15 jaren geleden
Eric Anholt
6255a1f4c6
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).
15 jaren geleden
Eric Anholt
dc1dbd65e1
ir_visit_tree: Make sure we visit dereference targets, too.
Found this with the local dead code pass, which never saw variable
dereferences occurring.
15 jaren geleden
Eric Anholt
aef0aaee67
ir_copy_propagation: Fix up the doxygen about the file.
15 jaren geleden
Eric Anholt
8e75de3164
ir_copy_propagation: Return true if we optimized out any assignments.
This may trigger other optimization phases to make more progress themselves.
15 jaren geleden
Eric Anholt
4e2c0b99d9
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.
15 jaren geleden
Eric Anholt
5c89f0ecb9
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.
15 jaren geleden
Eric Anholt
05a4e59c24
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.
15 jaren geleden
Eric Anholt
3bc8b68436
Remove the pedantic C junk.
Mesa doesn't use pedantic ANSI C89, so I have no idea why we would.
15 jaren geleden
Eric Anholt
3623df68fa
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.
15 jaren geleden
Eric Anholt
81f49a774e
Quiet warnings about ir_shader not being handled in places it's not needed.
15 jaren geleden
Eric Anholt
7f436a837c
Use the AM_SILENT_RULES when available.
15 jaren geleden
Eric Anholt
a35e62d97a
glsl_lexer: Quiet warning about unused unput().
15 jaren geleden
Ian Romanick
970353e047
Merge branch 'fixes'
15 jaren geleden
Kenneth Graunke
b0e0da5f07
Use %p rather than %08x when printing pointers to fix compile.
15 jaren geleden
Kenneth Graunke
05ddebac0a
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.
15 jaren geleden
Kenneth Graunke
c07fdae33f
Fix incorrect comments in function inliner.
15 jaren geleden
Eric Anholt
438f38c55a
ir_dead_code: Fix segfault on handling a return statement with no value.
15 jaren geleden
Ian Romanick
a2c6df5566
Track and print user defined structure types
15 jaren geleden
Ian Romanick
36d8a64a95
IR print visitor: Move logic for printing the whole program to _mesa_print_ir
15 jaren geleden
Ian Romanick
7d82c765a8
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.
15 jaren geleden
Eric Anholt
35e8e461ca
ir_function_inlining: Handle inlining of structure dereferences.
15 jaren geleden
Eric Anholt
c0bfe8723e
Correctly handle remapping of array dereferences if ->var is a variable.
15 jaren geleden
Ian Romanick
c824e35dd0
Begin handling some varieties of invalid declarations
15 jaren geleden
Ian Romanick
ab89927a91
Reject conflicting struct declarations, generate struct constructor
15 jaren geleden
Ian Romanick
82baaf4283
glsl_type::generate_constructor_prototype now generates the function too
Also, change the name of the method to generate_constructor.
15 jaren geleden
Ian Romanick
85ba37b97d
Always return a value from ast_type_specifier::hir
15 jaren geleden
Ian Romanick
8bec5e92e0
Support structures in glsl_type::generate_constructor_prototype
15 jaren geleden
Ian Romanick
ae000fcb2e
Implement structures and arrays in ir_dereference::is_lvalue
15 jaren geleden
Ian Romanick
73986a7a26
Ensure that structure fields have non-NULL types
15 jaren geleden
Ian Romanick
1d28b617ba
Ensure that anonymous structures have non-NULL names
15 jaren geleden
Ian Romanick
6efaeeea44
Convert structure field dereferences to HIR
15 jaren geleden
Ian Romanick
7ee79fb6b7
Add ir_dereference constructor for structure field dereferences
15 jaren geleden
Ian Romanick
8f755dcb67
Add glsl_type::field_type
Query the type of a structure field
15 jaren geleden
Ian Romanick
3455ce6144
Begin converting structure definitions to IR
15 jaren geleden
Ian Romanick
1f959ab4d6
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.
15 jaren geleden
Kenneth Graunke
bf783ecea6
ir_reader: Slightly better error message when failing to read swizzles.
15 jaren geleden
Kenneth Graunke
92eb64cd33
ir_reader: Don't print out the S-Expression.
It's no longer useful for debugging.
15 jaren geleden