Daniel Dunbar
5d3dbd64e1
Implement Direct ABIInfo semantics.
...
- No intended functionality change, this is essentially enabling
direct passing of complex and aggregate values, which no ABI is
using.
llvm-svn: 63863
2009-02-05 11:13:54 +00:00
Daniel Dunbar
cea3af4e54
Simplify test for whether we need an alloca to hold an indirect return
...
value.
- No functionality change.
llvm-svn: 63859
2009-02-05 09:24:53 +00:00
Daniel Dunbar
747865af0c
Implement ABI Indirect sematics for arguments.
...
- No intended functionality change, all current ABI implementations
were only using indirect for complex/aggregate types, which were
being passed indirectly with the Direct ABIInfo kind.
llvm-svn: 63858
2009-02-05 09:16:39 +00:00
Daniel Dunbar
b8b1c679c4
Merge ABIInfo StructRet/ByVal into Indirect.
...
- No (intended) functionality change, the semantic changes are to come.
llvm-svn: 63850
2009-02-05 08:00:50 +00:00
Daniel Dunbar
c79407fc40
Pull CodeGenFunction::GetUndefRValue() out of EmitUnsupportedRValue.
...
llvm-svn: 63845
2009-02-05 07:09:07 +00:00
Daniel Dunbar
70245be397
x86-32: Use Ignore to avoid passing empty structs (instead of Expand).
...
llvm-svn: 63813
2009-02-05 01:50:07 +00:00
Daniel Dunbar
0103574d55
Honor ByVal alignment. Patch by Nate Begeman!
...
llvm-svn: 63811
2009-02-05 01:31:19 +00:00
Daniel Dunbar
fff09f335d
Unbreak CGFunctionInfo::Profile method and reenable caching of ABI
...
information.
llvm-svn: 63799
2009-02-05 00:00:23 +00:00
Daniel Dunbar
56e7552c73
Add ABIArgInfo::dump()
...
llvm-svn: 63794
2009-02-04 23:24:38 +00:00
Daniel Dunbar
fb5fdf1f14
Temporarily disable caching of ABI results; this is going horribly
...
wrong in some cases.
llvm-svn: 63780
2009-02-04 21:36:22 +00:00
Daniel Dunbar
a45bdbbb6a
Add asserts that the function signature matches the other arguments provide
...
to CGCall functions.
llvm-svn: 63775
2009-02-04 21:17:21 +00:00
Daniel Dunbar
6e3b7df125
Handle demotion of coerced arguments (as in void a(x) short x; { ... }).
...
llvm-svn: 63726
2009-02-04 07:22:24 +00:00
Daniel Dunbar
a33461150d
Use ConvertTypeForMem when creating alloca for scalar argument.
...
llvm-svn: 63681
2009-02-03 23:04:57 +00:00
Daniel Dunbar
fc7c76159c
x86_64 ABI: Initial implementation of ABI compliant parameter passing.
...
- Now only 27/500 failures on ABITest single argument tests; from
350/500. :)
- As with return types, a large percentage of these are likely to be
gcc bugs, not yet reviewed.
Also, fix bug in handling of Ignore ABI type in argument lists.
llvm-svn: 63654
2009-02-03 20:00:13 +00:00
Daniel Dunbar
2f219b0770
ABI handling: Implement coercion for argument types (in addition to
...
return types).
llvm-svn: 63645
2009-02-03 19:12:28 +00:00
Daniel Dunbar
32931eb21d
Change ABIInfo to compute information for a full signature at a time
...
(the main point of this restructing).
llvm-svn: 63619
2009-02-03 06:51:18 +00:00
Daniel Dunbar
0136282a9c
Remove ABIArgInfo::Default kind, ABI is now responsible for specifying
...
acceptable kind with more precise semantics.
llvm-svn: 63617
2009-02-03 06:30:17 +00:00
Daniel Dunbar
67dace890f
Add ABIArgInfo::Direct kind, which passes arguments using whatever the
...
native IRgen type is. This is like Default, but without any extra
semantics (like automatic tweaking of structures or void).
llvm-svn: 63615
2009-02-03 06:17:37 +00:00
Daniel Dunbar
5a0acdc982
Add two FIXMEs.
...
llvm-svn: 63613
2009-02-03 06:02:10 +00:00
Daniel Dunbar
b52d077d8b
Always use CGFunctionInfo to access ABI information.
...
llvm-svn: 63612
2009-02-03 05:59:18 +00:00
Daniel Dunbar
313321ea23
Move ABIArgInfo into CGFunctionInfo, computed on creation.
...
- Still have to convert some consumers over.
llvm-svn: 63610
2009-02-03 05:31:23 +00:00
Daniel Dunbar
6d6b0d309a
Move ABIInfo/ABIArgInfo classes into ABIInfo.h
...
llvm-svn: 63586
2009-02-03 01:05:53 +00:00
Daniel Dunbar
e0be82956b
Memoize CGFunctionInfo construction.
...
llvm-svn: 63576
2009-02-03 00:07:12 +00:00
Daniel Dunbar
3668cb2d3c
Change CGFunctionInfo args iterator to not include the return type.
...
llvm-svn: 63571
2009-02-02 23:43:58 +00:00
Daniel Dunbar
bf8c24ad89
Thread CGFunctionInfo construction through CodeGenTypes.
...
- Inefficient & leaks memory currently, will be cleaned up subsequently.
llvm-svn: 63567
2009-02-02 23:23:47 +00:00
Daniel Dunbar
d931a87f90
More ABI API cleanup.
...
- Lift CGFunctionInfo creation above ReturnTypeUsesSret and
EmitFunction{Epi,Pro}log.
llvm-svn: 63553
2009-02-02 22:03:45 +00:00
Daniel Dunbar
7633cbf005
ABI handling API changes.
...
- Lift CGFunctionInfo creation up to callers of EmitCall.
- Move isVariadic bit out of CGFunctionInfo, take as argument to
GetFunctionType instead.
No functionality change.
llvm-svn: 63550
2009-02-02 21:43:58 +00:00
Daniel Dunbar
f5589ac5a9
Shuffle some functions around, no functionality change.
...
llvm-svn: 63538
2009-02-02 19:06:38 +00:00
Daniel Dunbar
50f520171c
Add FIXME.
...
llvm-svn: 63531
2009-02-02 18:06:39 +00:00
Daniel Dunbar
5df2b0baaa
Remove unused overload of GetFunctionType.
...
llvm-svn: 63472
2009-01-31 03:05:44 +00:00
Daniel Dunbar
a8b7f6bb13
Initialize CGFunctionInfo isVariadic bit correctly.
...
llvm-svn: 63471
2009-01-31 02:54:56 +00:00
Daniel Dunbar
a37249c663
Err, unbreak my previous "no functionality change commit", will fix properly later.
...
llvm-svn: 63467
2009-01-31 02:20:43 +00:00
Daniel Dunbar
3cd20632ff
Kill off CGCallInfo, always use CGFunctionInfo for encapsulating
...
function/call info.
llvm-svn: 63466
2009-01-31 02:19:00 +00:00
Daniel Dunbar
34aa3ca8c4
x86_64 ABI: Retool classification to compute lo & hi classifications
...
in terms of where the type resides in the containing object. This is a
more clear embodiement of the spec & fixes a merging issue with
unions. Down to 3/1000 failures.
llvm-svn: 63455
2009-01-31 00:06:58 +00:00
Daniel Dunbar
6a046c64d9
x86_64 ABI: Fix more thinkos, straddling computation for complex was
...
computing in bytes not bits. We are now down to 22/1000 failures on
the return types tests, and 18 of those are gcc bugs I believe.
llvm-svn: 63438
2009-01-30 22:40:15 +00:00
Daniel Dunbar
c35dca92f5
x86_64 ABI: Fix thinko in prev commit, 64-bit vectors should have SSE
...
class, not integer.
llvm-svn: 63426
2009-01-30 21:50:20 +00:00
Daniel Dunbar
4d22eaeb44
x86_64 ABI: Pass <1 x double> in memory. This is arguably wrong, but
...
matches gcc 4.2 (not llvm-gcc).
llvm-svn: 63413
2009-01-30 19:38:39 +00:00
Daniel Dunbar
7da8d0b321
Remove testing -use-x86_64-abi option; current implementation is
...
robust enough for general use.
llvm-svn: 63406
2009-01-30 18:47:53 +00:00
Daniel Dunbar
890c6b5520
x86_64 ABI: Split small vectors which cross an eightbyte boundary. Down to 33/500 return type failures.
...
llvm-svn: 63404
2009-01-30 18:40:10 +00:00
Daniel Dunbar
f5222fa0ad
x86_64 ABI: Implement classification for arrays.
...
- This brings us down to an 8% failure rate on the first 500 return
types tests (from 12%).
llvm-svn: 63383
2009-01-30 08:09:32 +00:00
Daniel Dunbar
62dc51c395
Use uint64_t not unsigned for type sizes/offsets.
...
llvm-svn: 63352
2009-01-30 00:47:38 +00:00
Daniel Dunbar
5537b8bc6c
x86_64 ABI: Handle fields / complex components which straddle
...
eightbyte boundaries.
- Getting harder to test now that we handle cases gcc & llvm-gcc get
wrong ( { _Complex char; _Complex int; } is a good example). :)
llvm-svn: 63305
2009-01-29 09:42:07 +00:00
Daniel Dunbar
7cd7d47c5c
x86_64 ABI: Tweak merging algorithm so that we always bail early when
...
we see a Memory classification.
llvm-svn: 63295
2009-01-29 08:35:40 +00:00
Daniel Dunbar
012468aa7f
ABI: When emitting calls which return an ignored argument, make sure
...
to still return an RValue of the correct type.
llvm-svn: 63294
2009-01-29 08:24:57 +00:00
Daniel Dunbar
17aa941534
x86_64 ABI: Implement classification for records.
...
- This is my best initial guess at what the "spec" means, although it is not
particularly clear on a number of points. Will refine through testing.
llvm-svn: 63292
2009-01-29 08:13:58 +00:00
Daniel Dunbar
227e1a77ff
x86_64: Support cases which map to returning multiple values in LLVM
...
(e.g., _Complex double -> { double, double } return).
llvm-svn: 63285
2009-01-29 07:36:07 +00:00
Daniel Dunbar
8e6652affc
x86_64 ABI: Classify _Complex ints as integer.
...
llvm-svn: 63283
2009-01-29 07:22:20 +00:00
Daniel Dunbar
d678d3d970
x86_64: Classify __m64 and __m128 "correctly".
...
- gcc appears to be classifying <1 x double> as INTEGER which is
odd. Will investigate later.
llvm-svn: 63086
2009-01-27 02:01:34 +00:00
Daniel Dunbar
0f4aa3cbb1
Implement support for coercion to wider types during ABI handling.
...
- Code quality is poor, but simple.
llvm-svn: 63083
2009-01-27 01:36:03 +00:00
Daniel Dunbar
94a6f25738
Add Ignore ABIArgInfo kind, for handling void & empty structures.
...
llvm-svn: 63039
2009-01-26 21:26:08 +00:00