| Commit message (Collapse) | Author | Age | Files | Lines | 
| ... |  | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
load/store nonsense in the epilog.  For example, for:
int foo(int X) {
  int A[100];
  return A[X];
}
we used to generate:
  %arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i64 %idxprom ; <i32*> [#uses=1]
  %tmp1 = load i32* %arrayidx                     ; <i32> [#uses=1]
  store i32 %tmp1, i32* %retval
  %0 = load i32* %retval                          ; <i32> [#uses=1]
  ret i32 %0
}
which codegen'd to this code:
_foo:                                   ## @foo
## BB#0:                                ## %entry
	subq	$408, %rsp              ## imm = 0x198
	movl	%edi, 400(%rsp)
	movl	400(%rsp), %edi
	movslq	%edi, %rax
	movl	(%rsp,%rax,4), %edi
	movl	%edi, 404(%rsp)
	movl	404(%rsp), %eax
	addq	$408, %rsp              ## imm = 0x198
	ret
Now we generate:
  %arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i64 %idxprom ; <i32*> [#uses=1]
  %tmp1 = load i32* %arrayidx                     ; <i32> [#uses=1]
  ret i32 %tmp1
}
and:
_foo:                                   ## @foo
## BB#0:                                ## %entry
	subq	$408, %rsp              ## imm = 0x198
	movl	%edi, 404(%rsp)
	movl	404(%rsp), %edi
	movslq	%edi, %rax
	movl	(%rsp,%rax,4), %eax
	addq	$408, %rsp              ## imm = 0x198
	ret
This actually does matter, cutting out 2000 lines of IR from CGStmt.ll 
for example.
Another interesting effect is that altivec.h functions which are dead
now get dce'd by the inliner.  Hence all the changes to 
builtins-ppc-altivec.c to ensure the calls aren't dead.
llvm-svn: 106970
 | 
| | 
| 
| 
|  | 
llvm-svn: 106967
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This avoids generating two gep's for common array operations.  Before
we would generate something like:
  %tmp = load i32* %X.addr                        ; <i32> [#uses=1]
  %arraydecay = getelementptr inbounds [100 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1]
  %arrayidx = getelementptr inbounds i32* %arraydecay, i32 %tmp ; <i32*> [#uses=1]
  %tmp1 = load i32* %arrayidx                     ; <i32> [#uses=1]
Now we generate:
  %tmp = load i32* %X.addr                        ; <i32> [#uses=1]
  %arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i32 %tmp ; <i32*> [#uses=1]
  %tmp1 = load i32* %arrayidx                     ; <i32> [#uses=1]
Less IR is better at -O0.
llvm-svn: 106966
 | 
| | 
| 
| 
| 
| 
| 
|  | 
we're done diddling around with the index stuff.  Use a cheaper type
comparison.
llvm-svn: 106963
 | 
| | 
| 
| 
|  | 
llvm-svn: 106962
 | 
| | 
| 
| 
| 
| 
|  | 
of being in CGF.  No functionality change.
llvm-svn: 106961
 | 
| | 
| 
| 
|  | 
llvm-svn: 106958
 | 
| | 
| 
| 
| 
| 
|  | 
code so we can use it from VisitUnaryMinus.
llvm-svn: 106957
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
As part of this, pull together trapv handling into the same enum.
This also add support for NSW multiplies.
This also makes PCH disagreement on overflow behavior silent, since it
really doesn't matter except for warnings and codegen (no macros get 
defined etc).
llvm-svn: 106956
 | 
| | 
| 
| 
| 
| 
|  | 
While I'm in there, adjust pointer to member adjustments as well.
llvm-svn: 106955
 | 
| | 
| 
| 
|  | 
llvm-svn: 106949
 | 
| | 
| 
| 
|  | 
llvm-svn: 106948
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Also, fix mangling of throw specs. Turns out MSVC totally ignores throw
specs when mangling names.
llvm-svn: 106937
 | 
| | 
| 
| 
|  | 
llvm-svn: 106875
 | 
| | 
| 
| 
| 
| 
|  | 
array of other done c++ objects. Fixes PR7490.
llvm-svn: 106869
 | 
| | 
| 
| 
| 
| 
| 
|  | 
when block literal is declared inside a ctor/dtor.
Fixes radr 8096995.
llvm-svn: 106700
 | 
| | 
| 
| 
| 
| 
|  | 
with several tweaks by me.
llvm-svn: 106619
 | 
| | 
| 
| 
|  | 
llvm-svn: 106618
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
types, updating callers of both isFloatingType() and
isRealFloatingType() accordingly. Caught at least one issue where we
allowed one to declare a vector of vectors (!), along with cleaning up
the standard-conversion logic for C++.
llvm-svn: 106595
 | 
| | 
| 
| 
| 
| 
| 
|  | 
category implementation whereby property list was missing.
NeXt ObjC runtime (radar 8093297).
llvm-svn: 106550
 | 
| | 
| 
| 
|  | 
llvm-svn: 106549
 | 
| | 
| 
| 
|  | 
llvm-svn: 106547
 | 
| | 
| 
| 
|  | 
llvm-svn: 106546
 | 
| | 
| 
| 
| 
| 
|  | 
is a static comparator operator).
llvm-svn: 106511
 | 
| | 
| 
| 
| 
| 
|  | 
Elhage!
llvm-svn: 106507
 | 
| | 
| 
| 
| 
| 
|  | 
order of priorotized global object initializations.
llvm-svn: 106503
 | 
| | 
| 
| 
| 
| 
| 
|  | 
objc_category_name_xxx for each category implementation.
(fixes PR7431) patch by Nico Weber.
llvm-svn: 106492
 | 
| | 
| 
| 
| 
| 
|  | 
emitted in the order in which they are seen (still radar 8076356).
llvm-svn: 106485
 | 
| | 
| 
| 
| 
| 
|  | 
reference.
llvm-svn: 106477
 | 
| | 
| 
| 
| 
| 
|  | 
for sorting (radar 8076356).
llvm-svn: 106453
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Test case will be checked in llvm test suite.
(finishes off radar 8076356).
llvm-svn: 106441
 | 
| | 
| 
| 
| 
| 
| 
|  | 
declaration have default visibility even under
-fvisibility=hidden. Fixes <rdar://problem/8109763>.
llvm-svn: 106440
 | 
| | 
| 
| 
|  | 
llvm-svn: 106407
 | 
| | 
| 
| 
| 
| 
|  | 
Patch by Anton Yartsev!
llvm-svn: 106387
 | 
| | 
| 
| 
| 
| 
|  | 
conservative for static variables in templated classes.
llvm-svn: 106385
 | 
| | 
| 
| 
| 
| 
|  | 
-mconstructor-aliases by using a WeakVH instead of a raw pointer.
llvm-svn: 106384
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Also, test that static members with default visibility in a struct have the
right mangling.
llvm-svn: 106276
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
lvalue when performing a derived-to-base conversion.
Fixes radar 7501812. Added an executable test to
llvm-test suite.
llvm-svn: 106247
 | 
| | 
| 
| 
| 
| 
|  | 
an lvalue. Fixes PR7390.
llvm-svn: 106235
 | 
| | 
| 
| 
|  | 
llvm-svn: 106211
 | 
| | 
| 
| 
|  | 
llvm-svn: 106206
 | 
| | 
| 
| 
|  | 
llvm-svn: 106188
 | 
| | 
| 
| 
| 
| 
|  | 
(the last argument of the triple).
llvm-svn: 106131
 | 
| | 
| 
| 
| 
| 
|  | 
decl. and one ddefined in darwin header file.
llvm-svn: 106107
 | 
| | 
| 
| 
|  | 
llvm-svn: 106106
 | 
| | 
| 
| 
|  | 
llvm-svn: 106081
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
provides C "integer type" semantics in C and C++ "integral type"
semantics in C++. 
Note that I still need to update isIntegerType (and possibly other
predicates) using the same approach I've taken for
isIntegralType(). The two should have the same meaning, but currently
don't (!).
llvm-svn: 106074
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
in C++ that involve both integral and enumeration types. Convert all
of the callers to Type::isIntegralType() that are meant to work with
both integral and enumeration types over to
Type::isIntegralOrEnumerationType(), to prepare to eliminate
enumeration types as integral types.
llvm-svn: 106071
 | 
| | 
| 
| 
| 
| 
|  | 
dependency edge was reversed such that CodeGen depends on Frontend.
llvm-svn: 106065
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
objective-c++ class objects which have GC'able objc object
pointers and need to use ObjC's objc_memmove_collectable
API (radar 8070772). 
llvm-svn: 106061
 |