- Mar 13, 2009
-
-
Duncan Sands authored
llvm-svn: 66890
-
Daniel Dunbar authored
llvm-svn: 66889
-
Daniel Dunbar authored
llvm-svn: 66888
-
Daniel Dunbar authored
llvm-svn: 66887
-
Daniel Dunbar authored
llvm-svn: 66886
-
Daniel Dunbar authored
to perform). Still doesn't do anything interesting. - This code came out much cleaner than in ccc with the reworked phases & mapping of types to lists of compilation steps (phases) to perform. llvm-svn: 66885
-
Gabor Greif authored
llvm-svn: 66884
-
Daniel Dunbar authored
llvm-svn: 66883
-
Daniel Dunbar authored
llvm-svn: 66882
-
Daniel Dunbar authored
provide information about what steps should be done for a particular file type. llvm-svn: 66881
-
Daniel Dunbar authored
llvm-svn: 66880
-
Daniel Dunbar authored
llvm-svn: 66879
-
Bill Wendling authored
instructions. Prevent that if we don't want implicit uses of SSE. llvm-svn: 66877
-
Argyrios Kyrtzidis authored
llvm-svn: 66876
-
Evan Cheng authored
Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 1. ConstantPoolSDNode alignment field is log2 value of the alignment requirement. This is not consistent with other SDNode variants. 2. MachineConstantPool alignment field is also a log2 value. 3. However, some places are creating ConstantPoolSDNode with alignment value rather than log2 values. This creates entries with artificially large alignments, e.g. 256 for SSE vector values. 4. Constant pool entry offsets are computed when they are created. However, asm printer group them by sections. That means the offsets are no longer valid. However, asm printer uses them to determine size of padding between entries. 5. Asm printer uses expensive data structure multimap to track constant pool entries by sections. 6. Asm printer iterate over SmallPtrSet when it's emitting constant pool entries. This is non-deterministic. Solutions: 1. ConstantPoolSDNode alignment field is changed to keep non-log2 value. 2. MachineConstantPool alignment field is also changed to keep non-log2 value. 3. Functions that create ConstantPool nodes are passing in non-log2 alignments. 4. MachineConstantPoolEntry no longer keeps an offset field. It's replaced with an alignment field. Offsets are not computed when constant pool entries are created. They are computed on the fly in asm printer and JIT. 5. Asm printer uses cheaper data structure to group constant pool entries. 6. Asm printer compute entry offsets after grouping is done. 7. Change JIT code to compute entry offsets on the fly. llvm-svn: 66875
-
Evan Cheng authored
llvm-svn: 66874
-
Chris Lattner authored
lexer into its own TGSourceMgr class. llvm-svn: 66873
-
Owen Anderson authored
llvm-svn: 66870
-
Chris Lattner authored
for i32/i64 expressions (we could also do i16 on cpus where i16 lea is fast, but I didn't add this). On the example, we now generate: _test: movl 4(%esp), %eax cmpl $42, (%eax) setl %al movzbl %al, %eax leal 4(%eax,%eax,8), %eax ret instead of: _test: movl 4(%esp), %eax cmpl $41, (%eax) movl $4, %ecx movl $13, %eax cmovg %ecx, %eax ret llvm-svn: 66869
-
Chris Lattner authored
example to: _test: movl 4(%esp), %eax cmpl $41, (%eax) setg %al movzbl %al, %eax orl $4294967294, %eax ret instead of: movl 4(%esp), %eax cmpl $41, (%eax) movl $4294967294, %ecx movl $4294967295, %eax cmova %ecx, %eax ret which is smaller in code size and faster. rdar://6668608 llvm-svn: 66868
-
Bill Wendling authored
llvm-svn: 66867
-
Bill Wendling authored
llvm-svn: 66866
-
Dan Gohman authored
operands can't both be fully folded at the same time. For example, in the included testcase, a global variable is being added with an add of two values. The global variable wants RIP-relative addressing, so it can't share the address with another base register, but it's still possible to fold the initial add. llvm-svn: 66865
-
Chris Lattner authored
defaults to off. When enabled, it emits range info along with the file/line/col information for a diagnostic. This allows tools that textually parse the output of clang to know where the ranges are, even if they span multiple lines. For example, with: $ clang exprs.c -fprint-source-range-info We now produce: exprs.c:21:11:{21:12-21:13}: warning: use of unary operator that may be intended as compound assignment (+=) var =+ 5; // expected-warning {{use of unary operator that may be intended as compound assignment (+=)}} ^~ exprs.c:22:11:{22:12-22:13}: warning: use of unary operator that may be intended as compound assignment (-=) var =- 5; // expected-warning {{use of unary operator that may be intended as compound assignment (-=)}} ^~ exprs.c:36:13:{36:3-36:12}: error: assignment to cast is illegal, lvalue casts are not supported (float*)X = P; // expected-error {{assignment to cast is illegal, lvalue casts are not supported}} ~~~~~~~~~ ^ exprs.c:41:4:{41:3-41:4}: error: called object type 'int' is not a function or function pointer X(); // expected-error {{called object type 'int' is not a function or function pointer}} ~^ exprs.c:45:15:{45:8-45:14}{45:17-45:24}: error: invalid operands to binary expression ('int *' and '_Complex float') P = (P-42) + Gamma*4; // expected-error {{invalid operands to binary expression ('int *' and '_Complex float')}} ~~~~~~ ^ ~~~~~~~ exprs.c:61:7:{61:16-61:22}: error: invalid application of '__alignof' to bitfield R = __alignof(P->x); // expected-error {{invalid application of '__alignof' to bitfield}} expected-warning {{extension used}} ^ ~~~~~~ Note the range info after the column in the initial diagnostic. This is obviously really annoying if you're not a tool parsing the output of clang, which is why it is off by default. llvm-svn: 66862
-
Chris Lattner authored
llvm-svn: 66860
-
Dale Johannesen authored
codegen (speculative execution). llvm-svn: 66859
-
Daniel Dunbar authored
llvm-svn: 66858
-
Daniel Dunbar authored
Also, add some FIXMEs, improve doxygen & comments. llvm-svn: 66857
-
Fariborz Jahanian authored
llvm-svn: 66856
-
Ted Kremenek authored
llvm-svn: 66855
-
Fariborz Jahanian authored
source being a non-pointer. llvm-svn: 66854
-
Mike Stump authored
llvm-svn: 66853
-
Douglas Gregor authored
C++ templates. In particular, keep track of the overloaded operators that are visible from the template definition, so that they can be merged with those operators visible via argument-dependent lookup at instantiation time. Refactored the lookup routines for argument-dependent lookup and for operator name lookup, so they can be called without immediately adding the results to an overload set. Instantiation of these expressions is completely wrong. I'll work on that next. llvm-svn: 66851
-
Chris Lattner authored
llvm-svn: 66850
-
Mike Stump authored
include the triplet so that people that run multiple targets in parallel, say i386 and x86_64 can distinguish between the two. llvm-svn: 66849
-
Daniel Dunbar authored
print-{multi-{directory,lib,os-directory}, search-dirs} as unsupported instead of handling separately. llvm-svn: 66848
-
Chris Lattner authored
to the stack. This shrinks all llvm tools by 9k, and improves reentrancy. llvm-svn: 66847
-
Argyrios Kyrtzidis authored
llvm-svn: 66846
-
Chris Lattner authored
llvm-svn: 66845
-
Daniel Dunbar authored
llvm-svn: 66844
-