path: root/ir/lower
Commit message (Collapse)AuthorAge
* lower_dw: implement a generic function for lowering Minus nodesJohannes Bucher2019-06-18
* improved readability/code quality according to clang-tidy readability checksJohannes Bucher2019-01-24
| | | | | | | resolved warnings for these checks: - readability-non-const-parameter - readability-avoid-const-params-in-decls - readability-named-parameter
* mux lowering: do not insert extra block between cond and phiJohannes Bucher2018-10-05
* mux lowering can insert critical edgesJohannes Bucher2018-10-05
* Fixed a va_arg lowering bug by first collecting all builtin nodes, then ↵Sebastian Graf2018-08-28
| | | | lowering. This will not rewrite block preds when while performing the postorder traversal.
* lower_dw: Lower Add and Sub to simple operations instead of using a library ↵Christoph Mallon2018-08-14
| | | | | | | | call. So far no names for the functions were provided and neither libgcc nor ARM aeabi have any. This uses the implementation from the MIPS backend.
* dw_lower: Use a more efficient lowering for ir_bk_parity.Christoph Mallon2018-08-06
| | | | Eor(Parity(hi), Parity(lo)) -> Parity(Eor(hi, lo)).
* Fix compiler errors if neither NDEBUG nor DEBUG_libfirm are definedSebastian Buchwald2018-05-16
* ir: Overhaul representation of ASM constraints in the IR.Christoph Mallon2018-05-11
| | | | | | | | | | Now the constraints are a mapping from the template position to the input/output positions instead of the other way round. Also there is only one list of constraints instead of a separate one for input and output. This simplifies handling quite a bit, in particular the numbering. E.g. "=m" actually is an input (for the address) and this caused miscounting when the constraints were processed. Also processing of 64 bit operands also lead to miscounting. This fixes x86code/asm_test15.c and x86code/asm_test19.c
* lower_dw: Move the ia32-specific ASM lowerer into the ia32 backend.Christoph Mallon2018-05-08
* lower_dw: Do not pass the high mode as parameter to the lowering functions.Christoph Mallon2018-05-08
| | | | Provide a function to get the high mode instead.
* lower_dw: Factor out code to determine the mode of the upper half.Christoph Mallon2018-05-07
* lower: Handle creation of the libgcc entities directly in the double word ↵Christoph Mallon2018-04-08
| | | | | | | | | | | lowerer. Before each backend specified the same names (or a subset thereof) by itself. Now also backends without explicit handling for several double word operations just use the libgcc functions. This re-uses the implementation of the SPARC backend, because it handled a superset of all others. Additionally the arm backend did not mangle the name. This was not critical because typical arm systems have no mangling.
* Avoid mixed signed/unsigned comparison.Christoph Mallon2018-02-26
* Recompute out edges after normalization to single Return nodePhilipp Serrer2017-12-13
* Fix float values in small structs passed by valuePhilipp Serrer2017-12-13
* Fix empty structs as return type and paramPhilipp Serrer2017-12-13
* Fix small structs as function return by valuePhilipp Serrer2017-12-13
* Implement a new, callback-based, lowering for calls with compounds.Andreas Fried2017-12-13
| | | | | | | | | | The difference between ABIs is so large that we cannot distingush between them with flags. Basically, we would have to implement all ABIs in lower_calls.c. Instead, we let the backends specify how parameter and result types are to be lowered. For now, all backends except IA-32 use a dummy ABI, which is the old Firm default, i.e. the SPARC ABI.
* Cleanup: Use consistent conditions and add some bracesSebastian Buchwald2017-12-13
* Rework target initialization and queryMatthias Braun2017-02-20
| | | | | | | | | | | | | | | | | | | | | | | | | | - Moves machine triple handling code form cparser into libfirm - Create new APIs to set the target and query information about it - Move backend_params into the new target API - Backends initialize ir_target instead of backend_params now - Add new API to get information about the target platform: - Mangle a name for the target platform (and remove compilerlib mangling callback) - Can query size and alignment of basic C types for the platform - Move some constant target information into arch_isa_if_t (we move it to target_info_t later when we realize it needs to be dynamic) - Redo backend initialization. Examples: Simple case: Initialize for host: ir_init(); Complex case: cross-compile to sparc with PIC enabled: ir_init_library(); ir_target_set("sparc-leon-linux-gnu"); ir_target_option("pic"); ir_target_init();
* Reorganize include directivesMatthias Braun2017-02-17
* Reorganize va_arg handlingMatthias Braun2017-01-28
| | | | | | Do not put stuff unnecessarily into backend params. - Pass lower_va_arg directly as a parameter to lower_builtins - Pass stack_param align directly to be_default_lower_va_arg
* lower_dw: Use be_is_big_endian()Matthias Braun2017-01-28
| | | | No need to pass around a custom field.
* lower: Constify.Christoph Mallon2017-01-24
* lower: Factor out code to check whether a type needs to be lowered.Christoph Mallon2016-12-31
* lower: Factor out common code for handling parameter, result and entity ↵Christoph Mallon2016-12-26
| | | | | | types in softfloat lowering. Checking 'is_Primitive_type()' achieves the same as 'mode && mode_is_float(mode)'.
* lower: Remove duplicate check.Christoph Mallon2016-12-26
| | | | get_lowered_mode() checks for mode_is_float().
* lower: Factor out common code for handling parameter and result types in ↵Christoph Mallon2016-12-26
| | | | double word lowering.
* ir: Factor out 'is_Const(x) && is_Const_one(x)' into the new function ↵Christoph Mallon2016-11-04
| | | | 'is_irn_one()'.
* ir: Factor out 'is_Const(x) && is_Const_null(x)' into the new function ↵Christoph Mallon2016-11-04
| | | | 'is_irn_null()'.
* Assure dominance in lower_calls_with_compounds().Christoph Mallon2016-10-09
| | | | | | | | | It currently uses dominance checks, though the use looks questionable. backend/lower_call4.c is the only test case which triggers this check. The check was added in bd1b1f0e0f1517ffe997eb103d1b41e4882f3d67. Though later in 5f4cf6e027fe4f96450ef5a3c5c5f834253a2264 another check was added, which would also handle this case for different reasons (target is not on the frame). So at least the test case needs to be updated validate the dominance check. Maybe the dominance check should be replaced by a dependence check.
* tr: Remove the concept of 'higher type'.Christoph Mallon2016-09-18
| | | | A higher type was set in a few places, but not used otherwise.
* Copy the debug info when creating and lowering CopyBs.Christoph Mallon2016-08-05
* Transform Return nodes before parametersSebastian Buchwald2016-07-29
| | | | | Return nodes can now access the frame type to decide whether a constructed CopyB node should be volatile.
* Let Load/Store nodes inherit volatility of CopyBSebastian Buchwald2016-07-14
| | | | This finally fixes opt/volatile2.c.
* Set the additional properties right when construction a method type.Christoph Mallon2016-07-11
* Set the calling convention right when construction a method type.Christoph Mallon2016-07-11
* Even further factorise the code to lower the type of builtins.Christoph Mallon2016-07-07
* Further factorise the code to lower the type of builtins.Christoph Mallon2016-07-07
* Factorise code to get the lowered type for a parameter or result of a builtin.Christoph Mallon2016-07-06
* Rename pdeq_new.h => pdeq.hMatthias Braun2016-06-27
* Use pdeq_new instead of pdeqMatthias Braun2016-06-27
* When making a 'Div' or 'Mod', automatically infer its mode from its left ↵Christoph Mallon2016-06-07
| | | | operand.
* When making a 'Sub', automatically infer its mode from its operands.Christoph Mallon2016-06-07
* When making an 'Add', automatically infer its mode from its operands.Christoph Mallon2016-06-07
* When making a 'Mux', automatically infer its mode from its 'false' operand.Christoph Mallon2016-06-07
* When making a 'Shl', 'Shr' or 'Shrs', automatically infer its mode from the ↵Christoph Mallon2016-06-07
| | | | left operand.
* When making a 'Mul', automatically infer its mode from its left operand.Christoph Mallon2016-06-07
* When making a 'And', 'Eor' or 'Or', automatically infer their modes from the ↵Christoph Mallon2016-06-07
| | | | left operand.