Commit Graph

84 Commits

Author SHA1 Message Date
Dan Gohman 477fd55c9a Fix a bug in the PIC16 backend.
llvm-svn: 78211
2009-08-05 16:46:43 +00:00
Dan Gohman f9bbcd1afd Major calling convention code refactoring.
Instead of awkwardly encoding calling-convention information with ISD::CALL,
ISD::FORMAL_ARGUMENTS, ISD::RET, and ISD::ARG_FLAGS nodes, TargetLowering
provides three virtual functions for targets to override:
LowerFormalArguments, LowerCall, and LowerRet, which replace the custom
lowering done on the special nodes. They provide the same information, but
in a more immediately usable format.

This also reworks much of the target-independent tail call logic. The
decision of whether or not to perform a tail call is now cleanly split
between target-independent portions, and the target dependent portion
in IsEligibleForTailCallOptimization.

This also synchronizes all in-tree targets, to help enable future
refactoring and feature work.

llvm-svn: 78142
2009-08-05 01:29:28 +00:00
Sanjiv Gupta b4c28d23e1 Legalize i64 store operations generated by inst-combine.
llvm-svn: 78082
2009-08-04 17:59:16 +00:00
Daniel Dunbar ed65bf420d Avoid compiler warning (in -Asserts mode)
llvm-svn: 78070
2009-08-04 16:46:12 +00:00
Chris Lattner 4d2c0f9008 switch off of 'Section' onto MCSection. We're not properly using
MCSection subclasses yet, but this is a step in the right direction.

llvm-svn: 77708
2009-07-31 18:48:30 +00:00
Sanjiv Gupta 7de154708a define target names for std libcalls.
llvm-svn: 77667
2009-07-31 07:35:57 +00:00
Owen Anderson 4056ca9568 Move types back to the 2.5 API.
llvm-svn: 77516
2009-07-29 22:17:13 +00:00
Chris Lattner 5e693ed07b Rip all of the global variable lowering logic out of TargetAsmInfo. Since
it is highly specific to the object file that will be generated in the end,
this introduces a new TargetLoweringObjectFile interface that is implemented
for each of ELF/MachO/COFF/Alpha/PIC16 and XCore.

Though still is still a brutal and ugly refactoring, this is a major step
towards goodness.

This patch also:
1. fixes a bunch of dangling pointer problems in the PIC16 backend.
2. disables the TargetLowering copy ctor which PIC16 was accidentally using.
3. gets us closer to xcore having its own crazy target section flags and
   pic16 not having to shadow sections with its own objects.
4. fixes wierdness where ELF targets would set CStringSection but not
   CStringSection_.  Factor the code better.
5. fixes some bugs in string lowering on ELF targets.

llvm-svn: 77294
2009-07-28 03:13:23 +00:00
Sanjiv Gupta c8885129d8 Generate a libcall for i8 multiply.
llvm-svn: 77179
2009-07-27 02:44:46 +00:00
Sanjiv Gupta e334b34bfd fixed incorrect lowering of ISD::SUB node. SUB has only one result value.
It wasn't caught during tests because we never got a sub generated, (i8 was always getting promoted to int, which in turn was broken into subc/sube). Though the optimizer leaves an i8 sub now. 

llvm-svn: 77178
2009-07-27 02:26:06 +00:00
Eli Friedman da9eda8ef6 Remove shift amount flavor. It isn't actually complete enough to
be useful, and it's currently unused.  (Some issues: it isn't actually 
rich enough to capture the semantics on many architectures, and
semantics can vary depending on the type being shifted.)

llvm-svn: 76633
2009-07-21 20:12:16 +00:00
Eli Friedman 836024d76d Remove some unnecessary expansion markings. Add a few expansion
markings that show up in test/CodeGen/Generic.

llvm-svn: 76160
2009-07-17 07:03:00 +00:00
Torok Edwin fbcc663cbf llvm_unreachable->llvm_unreachable(0), LLVM_UNREACHABLE->llvm_unreachable.
This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").

llvm-svn: 75640
2009-07-14 16:55:14 +00:00
Torok Edwin 56d0659726 assert(0) -> LLVM_UNREACHABLE.
Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.

llvm-svn: 75379
2009-07-11 20:10:48 +00:00
Owen Anderson 0504e0a222 Thread LLVMContext through MVT and related parts of SDISel.
llvm-svn: 75153
2009-07-09 17:57:24 +00:00
Torok Edwin fa04002254 Convert more abort() calls to llvm_report_error().
Also remove trailing semicolon.

llvm-svn: 75027
2009-07-08 19:04:27 +00:00
Sanjiv Gupta a587ffe12d For extended loads of type i1 to i8, we will need to at least one byte from memory.
The change in the .td file is to mark the side effects of mov insn.

llvm-svn: 74768
2009-07-03 07:58:59 +00:00
Tilmann Scheller aea6059ed4 Add NumFixedArgs attribute to CallSDNode which indicates the number of fixed arguments in a vararg call.
With the SVR4 ABI on PowerPC, vector arguments for vararg calls are passed differently depending on whether they are a fixed or a variable argument. Variable vector arguments always go into memory, fixed vector arguments are put 
into vector registers. If there are no free vector registers available, fixed vector arguments are put on the stack.

The NumFixedArgs attribute allows to decide for an argument in a vararg call whether it belongs to the fixed or variable portion of the parameter list.

llvm-svn: 74764
2009-07-03 06:44:53 +00:00
Sanjiv Gupta 78bd40ee89 Added floating point conditional operations support via libcalls.
llvm-svn: 74187
2009-06-25 18:12:06 +00:00
Sanjiv Gupta 84b581a4bd Fold the add (ptr, offset) into ptr[offset] only if the offset is small enough. movwi and moviw allow value of 5-bits only (i.e. 32).
llvm-svn: 73953
2009-06-23 07:10:19 +00:00
Sanjiv Gupta 05a7dba3bd Added missing libcalls for floating point to int conversions.
llvm-svn: 73491
2009-06-16 16:17:35 +00:00
Sanjiv Gupta 5dce37298f Generate libcalls for floating point arithmetic and casting operations.
llvm-svn: 73194
2009-06-11 16:50:48 +00:00
Sanjiv Gupta b794c12c7e Lower i16/i32 sdiv/udiv/srem/urem using libcalls.
llvm-svn: 72942
2009-06-05 14:43:12 +00:00
Sanjiv Gupta cc68f80549 Remove unused code.
llvm-svn: 72866
2009-06-04 15:16:24 +00:00
Sanjiv Gupta 7ff7621a1d Custom lower SUB with two register operands.
llvm-svn: 72861
2009-06-04 08:52:28 +00:00
Mike Stump 25bbcc67fa Make the buildbot see green (to make it easier to spot the next person
that puts a new warning in).

llvm-svn: 72797
2009-06-03 19:07:46 +00:00
Sanjiv Gupta b011aa3a5e FrameIndex could be used as a value (addressof (arg)) or as an address.
Expand it exactly like GlobalAddress.
Fix some more crashes (InsertBranch() not being implemented) for compiling hitec libs.

llvm-svn: 72776
2009-06-03 15:31:12 +00:00
Sanjiv Gupta a53241a880 Fixed a bug in which signed comparisons were being used instead of unsigned comparisons.
llvm-svn: 72771
2009-06-03 13:36:44 +00:00
Dale Johannesen ff10450680 Comment grammaro/clarification.
llvm-svn: 72706
2009-06-01 23:13:42 +00:00
Bill Wendling 09f17a8479 Untabification.
llvm-svn: 72604
2009-05-30 01:09:53 +00:00
Sanjiv Gupta 335311c67a Fixing problems that got exposed after the refactoring of LegalizeDAG done in 72447.
llvm-svn: 72521
2009-05-28 06:59:57 +00:00
Sanjiv Gupta ea5a8d8808 Fix more naming issues.
compiler libcalls start with .lib. now.
fixed section names.

llvm-svn: 71424
2009-05-11 08:52:04 +00:00
Sanjiv Gupta 258f851629 Changed lowering and asmprinter to use ABI Names class called PAN.
llvm-svn: 71386
2009-05-10 05:23:47 +00:00
Sanjiv Gupta 3033816c80 Use 16 bit arithmetic while retrieving the address of callee's frame during indirect function calls, and set pclath before every call to retrieve the frame address.
llvm-svn: 71323
2009-05-09 05:11:19 +00:00
Sanjiv Gupta 960ae0660b Emit banksel and movlp instructions.
Split large global data (both initialized and un-initialized) into multiple sections of <= 80 bytes.
Provide routines to manage PIC16 ABI naming conventions.

llvm-svn: 71073
2009-05-06 08:02:01 +00:00
Sanjiv Gupta ccd30945f9 Add a public method called getAddressSpace() to the GlobalAddressSDNode.
llvm-svn: 70366
2009-04-29 04:43:24 +00:00
Sanjiv Gupta 7bfed8a9f4 GlobalValue is always pointer type, so an assert isn't required.
llvm-svn: 70300
2009-04-28 16:39:45 +00:00
Sanjiv Gupta 107b2818ce Make the function begin label start after ther data pointer.
The address of data frame for function can be obtained by subtracting 2 from the function begin label.

llvm-svn: 69801
2009-04-22 12:02:36 +00:00
Sanjiv Gupta 3e3ef7c4d9 Handle direct aggregate type arguments.
llvm-svn: 69665
2009-04-21 05:54:51 +00:00
Sanjiv Gupta 92bb846e2b Handle aggregate type arguments to direct and indirect calls.
llvm-svn: 69022
2009-04-14 02:49:52 +00:00
Sanjiv Gupta 0368bc4703 While passing arg of types larger than char only one byte at lower end was getting passed. We couldn't catch this as we did not have tests that were passing an int value larger than 256.
llvm-svn: 68946
2009-04-13 09:38:38 +00:00
Sanjiv Gupta 638f400a3c Added code to handle spilling and reloading of FSRs.
llvm-svn: 68783
2009-04-10 15:10:14 +00:00
Sanjiv Gupta 60fd2cd503 Arguments to indirect calls were being passed incorrectly. They are not fixed to start after return value.
llvm-svn: 68705
2009-04-09 10:29:32 +00:00
Sanjiv Gupta cdfdc79b70 r68576 unconverd a bug in PIC16 port (Thanks to Dan Gohman) where we were custom lowering an ADD to ADDC.
llvm-svn: 68671
2009-04-09 04:03:43 +00:00
Sanjiv Gupta 44ea053a49 Emit .line debug directives for stoppoints. The debug location is retrieved by the MachineInstr itself, rather than by custom handling the DBG_STOPPOINT nodes.
llvm-svn: 68602
2009-04-08 06:24:04 +00:00
Sanjiv Gupta 4b489c75c2 Handle indirect function calls.
Every function has the address of its frame in the beginning of code section.
The frame address is retrieved and used to pass arguments.

llvm-svn: 68597
2009-04-08 05:38:48 +00:00
Sanjiv Gupta 0b08df8c09 Map stack based frameindices for spills to zero based indices that can be accessed based on an external symbol defining the location of temporary data for a function. For example: we have spill slots addressed as foo.tmp + 0, foo.tmp + 1 etc.
llvm-svn: 68442
2009-04-06 10:54:50 +00:00
Sanjiv Gupta e9cff3328f Fixed build warnings.
llvm-svn: 68333
2009-04-02 18:33:12 +00:00
Sanjiv Gupta cc841a3810 To convert the StopPoint insn into an assembler directive by ISel, we need to have access to the line number field. So we convert that info as an operand by custom handling DBG_STOPPOINT in legalize.
llvm-svn: 68329
2009-04-02 18:03:10 +00:00
Sanjiv Gupta 1e8860a8f5 Params are not being generated as static globals now. The caller passes them onto the callee's stack directly and the callee loads the argvals from its own stack. Clang generated frameindexes validatd by recalculating the stack as if all frameindexes represent 1-byte slots.
llvm-svn: 68327
2009-04-02 17:42:00 +00:00