Peter Collingbourne
422542625b
Implement -cl-mad-enable
...
llvm-svn: 120881
2010-12-04 01:51:33 +00:00
Peter Collingbourne
b8d9995c0e
Implement -cl-unsafe-math-optimizations
...
llvm-svn: 120879
2010-12-04 01:51:14 +00:00
Peter Collingbourne
0ba5ac8544
Implement -cl-finite-math-only
...
llvm-svn: 120878
2010-12-04 01:51:05 +00:00
Bob Wilson
7795599f4b
Add support for vmul_p8 Neon intrinsic. Radar 8446141.
...
llvm-svn: 120812
2010-12-03 17:29:39 +00:00
Bob Wilson
4fa993fc51
Add a separate rightShift flag instead of reusing the existing "poly" variable
...
to distinguish vsri/vsli.
llvm-svn: 120806
2010-12-03 17:10:22 +00:00
Chris Lattner
5cd8475564
Reflow to a style doug prefers, increasing indentation :-)
...
llvm-svn: 120746
2010-12-02 22:52:04 +00:00
Chris Lattner
c5cc2fb980
fix PR8726 by teaching the aggregate init optimization code to handle
...
structs with references in them correctly.
llvm-svn: 120722
2010-12-02 18:29:00 +00:00
Fariborz Jahanian
50198098b9
IR Gen. part of API support for __block cxx
...
objects imported into blocks. //rdar://8594790.
Will have a test case coming (as well as one
sent to llvm test suite).
llvm-svn: 120713
2010-12-02 17:02:11 +00:00
Chris Lattner
27a3631bac
Improve codegen for initializer lists to use memset more aggressively
...
when an initializer is variable (I handled the constant case in a previous
patch). This has three pieces:
1. Enhance AggValueSlot to have a 'isZeroed' bit to tell CGExprAgg that
the memory being stored into has previously been memset to zero.
2. Teach CGExprAgg to not emit stores of zero to isZeroed memory.
3. Teach CodeGenFunction::EmitAggExpr to scan initializers to determine
whether they are profitable to emit a memset + inividual stores vs
stores for everything.
The heuristic used is that a global has to be more than 16 bytes and
has to be 3/4 zero to be candidate for this xform. The two testcases
are illustrative of the scenarios this catches. We now codegen test9 into:
call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 400, i32 4, i1 false)
%.array = getelementptr inbounds [100 x i32]* %Arr, i32 0, i32 0
%tmp = load i32* %X.addr, align 4
store i32 %tmp, i32* %.array
and test10 into:
call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 392, i32 8, i1 false)
%tmp = getelementptr inbounds %struct.b* %S, i32 0, i32 0
%tmp1 = getelementptr inbounds %struct.a* %tmp, i32 0, i32 0
%tmp2 = load i32* %X.addr, align 4
store i32 %tmp2, i32* %tmp1, align 4
%tmp5 = getelementptr inbounds %struct.b* %S, i32 0, i32 3
%tmp10 = getelementptr inbounds %struct.a* %tmp5, i32 0, i32 4
%tmp11 = load i32* %X.addr, align 4
store i32 %tmp11, i32* %tmp10, align 4
Previously we produced 99 stores of zero for test9 and also tons for test10.
This xforms should substantially speed up -O0 builds when it kicks in as well
as reducing code size and optimizer heartburn on insane cases. This resolves
PR279.
llvm-svn: 120692
2010-12-02 07:07:26 +00:00
Chris Lattner
4fc8fb09d0
attempt to fix a buildbot failure, apparently apache fails to build.
...
llvm-svn: 120688
2010-12-02 04:27:29 +00:00
Eric Christopher
8a2ee390be
Add support for the common and nocommon attributes.
...
rdar://8560647
llvm-svn: 120650
2010-12-02 02:45:55 +00:00
Chris Lattner
e6af88628f
Enhance the init generation logic to emit a memset followed by a few stores when
...
a global is larger than 32 bytes and has fewer than 6 non-zero values in the
initializer. Previously we'd turn something like this:
char test8(int X) {
char str[10000] = "abc";
into a 10K global variable which we then memcpy'd from. Now we generate:
%str = alloca [10000 x i8], align 16
%tmp = getelementptr inbounds [10000 x i8]* %str, i64 0, i64 0
call void @llvm.memset.p0i8.i64(i8* %tmp, i8 0, i64 10000, i32 16, i1 false)
store i8 97, i8* %tmp, align 16
%0 = getelementptr [10000 x i8]* %str, i64 0, i64 1
store i8 98, i8* %0, align 1
%1 = getelementptr [10000 x i8]* %str, i64 0, i64 2
store i8 99, i8* %1, align 2
Which is much smaller in space and also likely faster.
This is part of PR279
llvm-svn: 120645
2010-12-02 01:58:41 +00:00
John McCall
b7bd14fa08
Simplify the ASTs by consolidating ObjCImplicitGetterSetterExpr and ObjCPropertyRefExpr
...
into the latter.
llvm-svn: 120643
2010-12-02 01:19:52 +00:00
John McCall
f3735e01ce
Restore the lvalue-to-rvalue conversion patch with a minimal fix.
...
llvm-svn: 120555
2010-12-01 04:43:34 +00:00
Chris Lattner
b85025fedd
add some infrastructure that will let us codegen
...
http://llvm.org/bugs/show_bug.cgi?id=279#c3 better.
No functionality change yet.
llvm-svn: 120530
2010-12-01 02:05:19 +00:00
Chris Lattner
46a7ad7605
get some i32/i8/i1 constants from Builder, which is much less painful than
...
using ConstantInt::get.
llvm-svn: 120527
2010-12-01 01:47:15 +00:00
John McCall
5a39bd2443
A CGRecordLayout object persists. Since its contained types may
...
refer to opaque types, they must be held via PATypeHolders. I'm
not sure why this hasn't blown up before.
llvm-svn: 120491
2010-11-30 23:21:46 +00:00
John McCall
bcd38217f3
CGRecordLayoutBuilder does not need to be exported from this module.
...
llvm-svn: 120489
2010-11-30 23:17:27 +00:00
Fariborz Jahanian
3a4ea9a76c
Declaring local static in global block
...
literal declaration caused crash in CodeGen.
This patch fixes it. pr8707
llvm-svn: 120486
2010-11-30 23:07:14 +00:00
John McCall
4f22c9de48
L-value to r-value conversion is not ready for prime-time.
...
llvm-svn: 120433
2010-11-30 17:58:55 +00:00
John McCall
824fd1dcff
Introduce an r-value to l-value cast kind. I'm not promising anything
...
about the reliability of this yet.
llvm-svn: 120422
2010-11-30 10:13:06 +00:00
Douglas Gregor
2f53a0bbf2
Harden CGDebugInfo::CreateType() a bit for cases where we couldn't generate type info for its component types
...
llvm-svn: 120401
2010-11-30 06:38:09 +00:00
Michael J. Spencer
8aaf49959c
Merge System into Support.
...
llvm-svn: 120297
2010-11-29 18:12:39 +00:00
Anders Carlsson
acf877be12
Don't store the maximum alignment, we can trivially compute it.
...
llvm-svn: 120268
2010-11-28 23:06:23 +00:00
Anders Carlsson
a459adb2ff
More work on laying out virtual bases.
...
llvm-svn: 120257
2010-11-28 19:18:44 +00:00
Anders Carlsson
3378d870d2
BuildVirtualCall doesn't need to take a reference to a pointer.
...
llvm-svn: 120252
2010-11-28 17:53:32 +00:00
Anders Carlsson
e8ba473ed2
Make the destructor be the 'vtable anchor' of the CGCXXABI class.
...
llvm-svn: 120251
2010-11-28 17:50:09 +00:00
Anders Carlsson
fdee32f8ed
Move CGCXXABI functions to CGCXXABI.cpp
...
llvm-svn: 120250
2010-11-28 17:49:03 +00:00
Anders Carlsson
81f6f3626e
Add a CGCXXABI.cpp file.
...
llvm-svn: 120249
2010-11-28 17:46:52 +00:00
Benjamin Kramer
90b5b68535
Hide a bunch of symbols.
...
llvm-svn: 120153
2010-11-25 18:29:30 +00:00
Anders Carlsson
1f95ee3016
Begin work on actually laying out virtual bases.
...
llvm-svn: 120140
2010-11-25 01:59:35 +00:00
Anders Carlsson
7f95cd1817
Rename RecordLayout::getPrimaryBaseWasVirtual to isPrimaryBaseVirtual.
...
llvm-svn: 120133
2010-11-24 23:12:57 +00:00
Anders Carlsson
cadbc463e2
Move code off the primary base info iterator. No functionality change.
...
llvm-svn: 120132
2010-11-24 23:04:03 +00:00
Anders Carlsson
4131f00a1f
Add CXXRecordDecl::getIndirectPrimaryBases.
...
llvm-svn: 120129
2010-11-24 22:50:27 +00:00
Anders Carlsson
72b1968d92
Simplify code.
...
llvm-svn: 120118
2010-11-24 21:53:50 +00:00
Anders Carlsson
0c75b49dc1
Fix a (probably very old) regression where we weren't using the typedef name for anonymous tag types.
...
llvm-svn: 120113
2010-11-24 21:05:09 +00:00
Anders Carlsson
0e4dfebe63
Revert r120110. We don't want to call ConvertType from within getCGRecordLayout.
...
llvm-svn: 120112
2010-11-24 20:22:04 +00:00
Anders Carlsson
449bbc5bde
Use ConvertType instead of ConvertTagDeclType, since ConvertType will assign a name to the type.
...
llvm-svn: 120110
2010-11-24 20:05:21 +00:00
Anders Carlsson
6277615cbb
Simplify code.
...
llvm-svn: 120109
2010-11-24 19:57:04 +00:00
Anders Carlsson
c5bcaa373b
Fix build.
...
llvm-svn: 120108
2010-11-24 19:52:29 +00:00
Anders Carlsson
63e0f2050f
Make CodeGenTypes::getCGRecordLayout compute the layout lazily if it doesn't exist. This matches ASTContext::getASTRecordLayout and is less confusing.
...
llvm-svn: 120107
2010-11-24 19:51:04 +00:00
Anders Carlsson
36e2fa8209
CGRecordLayout types are always struct types.
...
llvm-svn: 120106
2010-11-24 19:37:16 +00:00
John McCall
086a464e24
Switch a lot of call-sites over to using the new value-kind calculations.
...
llvm-svn: 120084
2010-11-24 05:12:34 +00:00
Anders Carlsson
849ea413c6
Refactor the null-initialization for record types and make it handle bases that aren't i8 arrays.
...
llvm-svn: 119980
2010-11-22 18:42:14 +00:00
Anders Carlsson
39a6b22023
Remove FIXME; we don't ever want to lay out empty bases.
...
llvm-svn: 119957
2010-11-22 00:03:08 +00:00
Anders Carlsson
a7dd96ce77
Rename BaseLLVMType to NonVirtualBaseLLVMType.
...
llvm-svn: 119956
2010-11-21 23:59:45 +00:00
Anders Carlsson
e64fbe2a6c
Add getCGRecordLayout helper function. No functionality change.
...
llvm-svn: 119955
2010-11-21 23:56:06 +00:00
Francois Pichet
df946c3702
Fix warning: enumeration value 'IndirectField' not handled in switch.
...
llvm-svn: 119924
2010-11-21 06:49:41 +00:00
Fariborz Jahanian
44a41d1c25
Minor cleanup. No change otherwise.
...
llvm-svn: 119814
2010-11-19 18:17:09 +00:00
Fariborz Jahanian
148d113e55
Fix a bug where write-barriers for assignment through reference
...
types was not being generated for objc pointers.
// rdar://8681766.
llvm-svn: 119751
2010-11-18 22:39:16 +00:00