summaryrefslogtreecommitdiffstats
path: root/clang/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* implement __extension__ and unary~ for complex.Chris Lattner2007-08-211-0/+12
| | | | llvm-svn: 41249
* implement codegen for complex unary +/-Chris Lattner2007-08-211-1/+12
| | | | llvm-svn: 41247
* minor nicities.Chris Lattner2007-08-211-6/+9
| | | | llvm-svn: 41244
* implement support for complex subscripts.Chris Lattner2007-08-211-4/+2
| | | | llvm-svn: 41240
* allow support for volatile lvalues even though it's still not right.Chris Lattner2007-08-211-12/+14
| | | | llvm-svn: 41239
* Implement parsing and code generation of Objective-C string literals.Anders Carlsson2007-08-213-0/+33
| | | | llvm-svn: 41238
* add a new builder ivar.Chris Lattner2007-08-211-24/+25
| | | | llvm-svn: 41237
* move EmitLoadOfComplex/EmitStoreOfComplex into ComplexExprEmitter.Chris Lattner2007-08-214-60/+40
| | | | llvm-svn: 41236
* implement comma for complex.Chris Lattner2007-08-212-1/+7
| | | | llvm-svn: 41235
* and/or/xor are invalid for complex, even integer complex apparently.Chris Lattner2007-08-212-138/+6
| | | | llvm-svn: 41234
* simplify code slightlyChris Lattner2007-08-211-3/+4
| | | | llvm-svn: 41233
* reimplement support for complex comparisons, add support for integer complex ↵Chris Lattner2007-08-213-27/+39
| | | | | | compares. llvm-svn: 41231
* reimplement complex mulChris Lattner2007-08-212-47/+28
| | | | llvm-svn: 41226
* update some comments.Chris Lattner2007-08-212-5/+4
| | | | llvm-svn: 41218
* Split complex arithmetic codegen out from aggregate codegen.Chris Lattner2007-08-214-160/+320
| | | | | | | | | | | | | | | | This means that we get rid of tons of intermediate allocas. For example: void foo(double _Complex a, double _Complex b) { a = b+a+a; } this used to have 4 temporary allocas, now it has zero of them. This also simplifies the individual visitor methods because they now can all operate on real/imag pairs instead of having to load/store all over the place. llvm-svn: 41217
* simplify this a bit to remove indirectionChris Lattner2007-08-211-3/+3
| | | | llvm-svn: 41216
* reimplement addition of complex numbers.Chris Lattner2007-08-213-67/+108
| | | | llvm-svn: 41215
* Add the ability to visit binary operators without having toChris Lattner2007-08-211-10/+6
| | | | | | match on binop then explicitly switching again. llvm-svn: 41214
* switch aggregate expr codegen to use a visitor to localize most of the nasty Chris Lattner2007-08-212-78/+69
| | | | | | details in its own file. llvm-svn: 41213
* Implement code generation for constant CFStrings.Anders Carlsson2007-08-215-3/+82
| | | | llvm-svn: 41206
* Fix array->pointer decay. This unbreaks test/CodeGen/array.cChris Lattner2007-08-202-1/+28
| | | | llvm-svn: 41202
* Add support for code generation of builtins.Anders Carlsson2007-08-203-0/+41
| | | | llvm-svn: 41188
* Modified ArraySubscriptExpr to have accessors getLHS and getRHS in additionTed Kremenek2007-08-201-18/+7
| | | | | | | | | | | | | to getBase and getIdx. getBase and getIdx now return a "normalized" view of the expression (e.g., always "A[4]" instead of possibly "4[A]"). getLHS and getRHS return the expressions with syntactic fidelity to the original source code. Also modified client code of ArraySubscriptExpr, including the AST dumper and pretty printer, the return-stack value checker, and the LLVM code generator. llvm-svn: 41180
* Add preliminary support for converting struct types.Anders Carlsson2007-08-173-6/+30
| | | | llvm-svn: 41145
* start splitting out aggregate value computation from EmitExpr into EmitAggExpr.Chris Lattner2007-08-114-58/+336
| | | | | | | | aggregate value and scalar expression computation are very different, this gets them away from each other. This causes a temporary regression on some complex number examples. llvm-svn: 41014
* New file, just a placeholder for now.Chris Lattner2007-08-101-0/+17
| | | | llvm-svn: 41002
* fix a codegen bug handling ocuvector element exprs.Chris Lattner2007-08-101-3/+4
| | | | llvm-svn: 40995
* implement initial codegen for aggregate return functions. This implementsChris Lattner2007-08-102-4/+13
| | | | | | | | | | | | | | | codegen for: _Complex double bar(int); void test(_Complex double*); void test2(int c) { _Complex double X; X = bar(1); test(&X); } llvm-svn: 40993
* Fix a bug handling function -> pointer decay and avoid emitting a noopChris Lattner2007-08-101-2/+6
| | | | | | bitcast. llvm-svn: 40992
* now that implicit conversions are explicit, we can eliminate Chris Lattner2007-08-082-133/+31
| | | | | | EmitUsualArithmeticConversions. llvm-svn: 40931
* now that implicit conversions are explicit, we can eliminateChris Lattner2007-08-082-125/+45
| | | | | | EmitExprWithUsualUnaryConversions. llvm-svn: 40929
* Implement codegen for __builtin_choose_expr. For example:Chris Lattner2007-08-042-0/+14
| | | | | | | | | | | | | | | | | | | struct X { int A; }; void foo() { struct X s; int i; i = __builtin_choose_expr(0, s, i); } compiles to: %tmp = load i32* %i ; <i32> [#uses=1] store i32 %tmp, i32* %i wow :) llvm-svn: 40801
* implement codegen support for __builtin_types_compatible_pChris Lattner2007-08-032-0/+11
| | | | llvm-svn: 40788
* Rename AddrLabel and OCUVectorComponent -> AddrLabelExpr and ↵Chris Lattner2007-08-032-31/+31
| | | | | | OCUVectorElementExpr respectively. This is for consistency with other expr nodes end with *Expr. llvm-svn: 40785
* implement codegen for multidest ocuvector expressions, like:Chris Lattner2007-08-031-5/+14
| | | | | | | vec2.yx = vec2; // reverse llvm-svn: 40782
* add codegen support for storing into a single-element ocu lvalue, such as:Chris Lattner2007-08-032-10/+40
| | | | | | vec2.x = f; llvm-svn: 40781
* refactor handling of ocuvector lvalue->rvalue codegen into its own method.Chris Lattner2007-08-032-43/+52
| | | | llvm-svn: 40780
* In the common case where we are shuffling a vector, emit anChris Lattner2007-08-031-2/+19
| | | | | | | | | | | | | | | | | | | | | llvm vector shuffle instead of a bunch of insert/extract operations. For: vec4 = vec4.yyyy; // splat Emit: %tmp1 = shufflevector <4 x float> %tmp, <4 x float> undef, <4 x i32> < i32 1, i32 1, i32 1, i32 1 > instead of: %tmp1 = extractelement <4 x float> %tmp, i32 1 %tmp2 = insertelement <4 x float> undef, float %tmp1, i32 0 %tmp3 = extractelement <4 x float> %tmp, i32 1 %tmp4 = insertelement <4 x float> %tmp2, float %tmp3, i32 1 %tmp5 = extractelement <4 x float> %tmp, i32 1 %tmp6 = insertelement <4 x float> %tmp4, float %tmp5, i32 2 %tmp7 = extractelement <4 x float> %tmp, i32 1 %tmp8 = insertelement <4 x float> %tmp6, float %tmp7, i32 3 llvm-svn: 40779
* Add support for scalar-returning element accesses like V.xChris Lattner2007-08-031-2/+12
| | | | llvm-svn: 40777
* implement lvalue to rvalue conversion for ocuvector components. We can now ↵Chris Lattner2007-08-032-1/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | compile stuff like this: typedef __attribute__(( ocu_vector_type(4) )) float float4; float4 test1(float4 V) { return V.wzyx+V; } to: _test1: pshufd $27, %xmm0, %xmm1 addps %xmm0, %xmm1 movaps %xmm1, %xmm0 ret and: _test1: mfspr r2, 256 oris r3, r2, 4096 mtspr 256, r3 li r3, lo16(LCPI1_0) lis r4, ha16(LCPI1_0) lvx v3, r4, r3 vperm v3, v2, v2, v3 vaddfp v2, v3, v2 mtspr 256, r2 blr llvm-svn: 40771
* add support for codegen of an OCUVectorComponent as an lvalue.Chris Lattner2007-08-022-4/+34
| | | | | | | | | | We can now codegen: vec4.xy; as nothing! llvm-svn: 40769
* silence some warnings.Chris Lattner2007-08-021-1/+4
| | | | llvm-svn: 40761
* update this to build with LLVM ToTChris Lattner2007-08-011-2/+2
| | | | llvm-svn: 40665
* Implement code generation for __func__, __FUNCTION__ and __PRETTY_FUNCTION__Anders Carlsson2007-07-212-0/+39
| | | | llvm-svn: 40162
* silence a warning by treating ocuvectors the same as vectors.Chris Lattner2007-07-191-0/+1
| | | | llvm-svn: 40037
* implement codegen support for sizeof/alignofChris Lattner2007-07-182-2/+26
| | | | llvm-svn: 40009
* Implement break and continue. Patch by Anders Carlsson!Chris Lattner2007-07-163-13/+76
| | | | llvm-svn: 39927
* Add a hack (mirroring llvm-gcc) to pointer difference Chris Lattner2007-07-161-7/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | codegen to compile: int test(int *A, int *B) { return A-B; } into: _test: movl 4(%esp), %eax subl 8(%esp), %eax sarl $2, %eax ret instead of: _test: movl 4(%esp), %eax subl 8(%esp), %eax movl %eax, %ecx sarl $31, %ecx shrl $30, %ecx addl %ecx, %eax sarl $2, %eax ret llvm-svn: 39902
* Refactor code so that isIntegerConstantExpr has an ASTContext available.Chris Lattner2007-07-154-5/+6
| | | | llvm-svn: 39884
* add FIXME and un-XFAIL testGabor Greif2007-07-141-0/+2
| | | | llvm-svn: 39858
OpenPOWER on IntegriCloud