Rafael Espindola
00e861ed57
Support segmented stacks on 64-bit FreeBSD.
...
This patch uses tcb_spare field in the tcb structure to store info.
Patch by Jyun-Yan You.
llvm-svn: 148041
2012-01-12 20:24:30 +00:00
Rafael Espindola
10745d3381
Support segmented stacks on win32.
...
Uses the pvArbitrary slot of the TIB, which is reserved for applications. We
only support frames with a static size.
llvm-svn: 148040
2012-01-12 20:22:08 +00:00
Benjamin Kramer
9ece950ddb
After Jakob's r147938 exception handling on i386 was completely broken.
...
Restore the (obviously wrong) behavior from before r147938 without relying on
undefined behavior. Add a fat FIXME note.
This should fix nightly tester failures.
llvm-svn: 148030
2012-01-12 17:37:18 +00:00
Rafael Espindola
d90466bcbf
Support segmented stacks on mac.
...
This uses TLS slot 90, which actually belongs to JavaScriptCore. We only support
frames with static size
Patch by Brian Anderson.
llvm-svn: 147960
2012-01-11 19:00:37 +00:00
Rafael Espindola
4eecacb9c8
Generate the segmented stack prologue for fastcc too.
...
Patch by Brian Anderson.
llvm-svn: 147958
2012-01-11 18:41:19 +00:00
Rafael Espindola
2b89448d60
Use unsigned comparison in segmented stack prologue.
...
This is a comparison of two addresses, and GCC does the comparison unsigned.
Patch by Brian Anderson.
llvm-svn: 147954
2012-01-11 18:23:35 +00:00
Rafael Espindola
6635ae1c17
Explicitly set the scale to 1 on some segstack prologue instrs.
...
Patch by Brian Anderson.
llvm-svn: 147952
2012-01-11 18:14:03 +00:00
Jakob Stoklund Olesen
6039983755
Fix undefined code and reenable test case.
...
I don't think the compact encoding code is right, but at least is has
defined behavior now.
llvm-svn: 147938
2012-01-11 09:08:04 +00:00
Bill Wendling
ae94fb4009
The saved registers weren't being processed in the correct order. This lead to
...
the compact unwind claiming that one register was saved before another, which
isn't all that great in general. Process them in the natural order. Reverse the
list only when necessary for the algorithm.
llvm-svn: 146612
2011-12-14 23:53:24 +00:00
Bill Wendling
302cf8d5d0
Adjust the stack by one pointer size for all frameless stacks.
...
llvm-svn: 146030
2011-12-07 07:58:55 +00:00
Bill Wendling
3c86459997
Fix off-by-one error when encoding the stack size for a frameless stack.
...
llvm-svn: 146029
2011-12-07 07:49:49 +00:00
Evan Cheng
7f8e563a69
Add bundle aware API for querying instruction properties and switch the code
...
generator to it. For non-bundle instructions, these behave exactly the same
as the MC layer API.
For properties like mayLoad / mayStore, look into the bundle and if any of the
bundled instructions has the property it would return true.
For properties like isPredicable, only return true if *all* of the bundled
instructions have the property.
For properties like canFoldAsLoad, isCompare, conservatively return false for
bundles.
llvm-svn: 146026
2011-12-07 07:15:52 +00:00
Bill Wendling
67a70c995a
Explicitly check for the different SUB instructions.
...
llvm-svn: 145976
2011-12-06 22:14:27 +00:00
Bill Wendling
5a173cd367
Encode the total stack if there isn't a frame.
...
llvm-svn: 145969
2011-12-06 21:34:01 +00:00
Bill Wendling
a73c0c99ea
* Add a macro to remove a magic number.
...
* Rename variables to reflect what they're actually used for.
llvm-svn: 145968
2011-12-06 21:23:42 +00:00
Bill Wendling
87571b6392
Check the correct value for small stack sizes. Also modify some comments.
...
llvm-svn: 145954
2011-12-06 19:16:17 +00:00
Bill Wendling
a4e87944a8
For a small sized stack, we encode that value directly with no "stack adjust" value.
...
llvm-svn: 145952
2011-12-06 19:09:06 +00:00
Bill Wendling
4e87e850a2
Add a comment.
...
llvm-svn: 145896
2011-12-06 01:57:48 +00:00
Bill Wendling
f7cef7ecad
The compact encoding of the registers are 3-bits each. Make sure we shift the
...
value over that much.
llvm-svn: 145888
2011-12-06 01:26:14 +00:00
Sanjoy Das
006e43bcc0
Check for stack space more intelligently.
...
libgcc sets the stack limit field in TCB to 256 bytes above the actual
allocated stack limit. This means if the function's stack frame needs
less than 256 bytes, we can just compare the stack pointer with the
stack limit. This should result in lesser calls to __morestack.
llvm-svn: 145766
2011-12-03 09:32:07 +00:00
Sanjoy Das
165ca1d4ba
Fix a bug in the x86-32 code generated for segmented stacks.
...
Currently LLVM pads the call to __morestack with a add and sub of 8
bytes to esp. This isn't correct since __morestack expects the call
to be followed directly by a ret.
This commit also adjusts the relevant test-case.
llvm-svn: 145765
2011-12-03 09:21:07 +00:00
Nick Lewycky
50f02cb21b
Move global variables in TargetMachine into new TargetOptions class. As an API
...
change, now you need a TargetOptions object to create a TargetMachine. Clang
patch to follow.
One small functionality change in PTX. PTX had commented out the machine
verifier parts in their copy of printAndVerify. That now calls the version in
LLVMTargetMachine. Users of PTX who need verification disabled should rely on
not passing the command-line flag to enable it.
llvm-svn: 145714
2011-12-02 22:16:29 +00:00
Sanjoy Das
f60485c4cf
Dummy commit to check commit access.
...
llvm-svn: 145619
2011-12-01 19:15:08 +00:00
Bill Wendling
8df8204554
If we have to reset the calculation of the compact encoding, then also reset the
...
"saved register" index.
<rdar://problem/10430076>
llvm-svn: 144350
2011-11-11 00:59:14 +00:00
Rafael Espindola
66393c127d
This commit introduces two fake instructions MORESTACK_RET and
...
MORESTACK_RET_RESTORE_R10; which are lowered to a RET and a RET
followed by a MOV respectively. Having a fake instruction prevents
the verifier from seeing a MachineBasicBlock end with a
non-terminator (MOV). It also prevents the rather eccentric case of a
MachineBasicBlock ending with RET but having successors nevertheless.
Patch by Sanjoy Das.
llvm-svn: 143062
2011-10-26 21:12:27 +00:00
Duncan Sands
d278d35b13
Fix a bunch of unused variable warnings when doing a release
...
build with gcc-4.6.
llvm-svn: 142350
2011-10-18 12:44:00 +00:00
Bill Wendling
25f6d3e321
More closely follow libgcc, which has code after the `ret' instruction to
...
release the stack segment and reset the stack pointer. Place the code in its own
MBB to make the verifier happy.
llvm-svn: 141859
2011-10-13 08:24:19 +00:00
Bill Wendling
22a690e3db
Should not add instructions to a BB after a return instruction. The machine instruction verifier doesn't like this, nor do I.
...
llvm-svn: 141856
2011-10-13 07:42:32 +00:00
Jakob Stoklund Olesen
55cf2ed148
Only run MF.verify() with EXPENSIVE_CHECKS=1.
...
llvm-svn: 140441
2011-09-24 01:11:19 +00:00
Bill Wendling
226c4ed92a
Reenable compact unwind by default. However, also emit the old version of unwind
...
information for older linkers.
llvm-svn: 139206
2011-09-06 23:47:14 +00:00
Bill Wendling
4e1d018935
Revert r138826 until PR10834 can be fixed.
...
llvm-svn: 139018
2011-09-02 18:15:04 +00:00
Rafael Espindola
6e31dfea35
Spelling and grammar fixes to problems found by Duncan.
...
llvm-svn: 138858
2011-08-31 16:43:33 +00:00
Eli Friedman
635d9692b6
Make sure we don't crash when -miphoneos-version-min is specified on x86. Hopefully this will fix gcc testsuite failures.
...
llvm-svn: 138856
2011-08-31 16:19:51 +00:00
Bill Wendling
6470e07e20
Fix off-by-one error Benjamin noticed.
...
llvm-svn: 138832
2011-08-30 21:23:24 +00:00
Bill Wendling
7a9c3033a4
Enable compact unwind info by default. This only applies to Darwin when CFI is
...
disabled.
llvm-svn: 138826
2011-08-30 20:54:11 +00:00
Rafael Espindola
c21742112b
Emit segmented-stack specific code into function prologues for
...
X86. Modify the pass added in the previous patch to call this new
code.
This new prologues generated will call a libgcc routine (__morestack)
to allocate more stack space from the heap when required
Patch by Sanjoy Das.
llvm-svn: 138812
2011-08-30 19:39:58 +00:00
Andrew Trick
210bf8351d
findDeadCallerSavedReg fix: Missing NULL terminator in register arrays.
...
Fix by Ivan Baev. Sorry I don't have a unit test, but the fix is obvious so I don't want to delay it.
llvm-svn: 137404
2011-08-12 00:49:19 +00:00
Bill Wendling
ee61946783
The compact unwinding offsets are divided by 8 on 64-bit machines.
...
llvm-svn: 136065
2011-07-26 08:03:49 +00:00
Bill Wendling
43ab71a9a8
Update the comment. This feature is available only on Darwin at the moment. Though it's not Darwin-specific.
...
llvm-svn: 135951
2011-07-25 20:15:15 +00:00
Bill Wendling
2dc0005b3c
Changed disabled code into a flag.
...
llvm-svn: 135924
2011-07-25 18:04:49 +00:00
Bill Wendling
1d10909cb7
Remove dead variable.
...
llvm-svn: 135923
2011-07-25 18:01:27 +00:00
Bill Wendling
b97270d58a
After we've modified the prolog to save volatile registers, generate the compact
...
unwind encoding for that function. This simply crawls through the prolog looking
for machine instrs marked as "frame setup". It can calculate from these what the
compact unwind should look like.
This is currently disabled because of needed linker support. But initial tests
look good.
llvm-svn: 135922
2011-07-25 18:00:28 +00:00
Bill Wendling
28b6e12d9d
Mark instructions which are part of the frame setup with the MachineInstr::FrameSetup flag.
...
llvm-svn: 135645
2011-07-21 00:44:56 +00:00
Bill Wendling
ed93564c7a
Remove unused function.
...
llvm-svn: 135635
2011-07-20 23:07:42 +00:00
Bill Wendling
01bd7d9dc0
Remove the now defunct getCompactUnwindEncoding method from the frame lowering code.
...
llvm-svn: 135634
2011-07-20 23:04:09 +00:00
Evan Cheng
67c033e6b8
Move getInitialFrameState from TargetFrameInfo to MCAsmInfo (suggestions for
...
better location welcome).
llvm-svn: 135438
2011-07-18 22:29:13 +00:00
Bill Wendling
2d825b5ecf
* Redo the permutation encoding for frameless stacks to be more like what the
...
unwind library expects.
* Comment the permutation encoding for frameless stacks.
llvm-svn: 135202
2011-07-14 22:01:34 +00:00
Bill Wendling
d11ea81db0
Add code to handle a "frameless" unwind stack.
...
The frameless unwind stack has a special encoding, the algorithm for which is in
"permuteEncode".
llvm-svn: 135103
2011-07-13 23:03:31 +00:00
Bill Wendling
ee6e776be2
Don't emit the FDE end label if the last thing emitted was a compact unwind and
...
not the FDE
llvm-svn: 135020
2011-07-13 00:49:09 +00:00
Bill Wendling
0402e8fe4b
Assign variable before we test it.
...
llvm-svn: 135015
2011-07-13 00:23:39 +00:00
Bill Wendling
ed3c44224b
Fix obvious think-o.
...
llvm-svn: 135014
2011-07-13 00:20:09 +00:00
Bill Wendling
929b90ff32
Clean up the handling of an EBP/RBP unwind frame pointer. In particular, don't
...
assert when the frame pointer is -1 (i.e., the function is "frameless").
Still to do: "frameless" unwind information.
llvm-svn: 135013
2011-07-13 00:16:14 +00:00
Bill Wendling
667be58220
Use ArrayRef instead of a std::vector&.
...
llvm-svn: 134595
2011-07-07 04:42:01 +00:00
Bill Wendling
b6adf46f62
Add a target hook to encode the compact unwind information.
...
llvm-svn: 134577
2011-07-07 00:54:13 +00:00
Nick Lewycky
34a425b075
Fit banner in 80-col and adjust whitespace. No functionality changes.
...
llvm-svn: 132964
2011-06-14 03:23:52 +00:00
Charles Davis
7ed40cbded
Put FrameSetup flag on x86 instructions that set up the call frame. No
...
functionality change.
Later on, we'll use the flag to emit SEH pseudo-ops that describe how the
call frame was built.
llvm-svn: 132880
2011-06-12 01:45:54 +00:00
Rafael Espindola
fc9bae6f8b
Replace the -unwind-tables option with a per function flag. This is more
...
LTO friendly as we can now correctly merge files compiled with or without
-fasynchronous-unwind-tables.
llvm-svn: 132033
2011-05-25 03:44:17 +00:00
Rafael Espindola
80cb3cb1d6
Print all the moves at a given label instead of just the first one.
...
Remove previous DwarfCFI hack.
llvm-svn: 130187
2011-04-26 03:58:56 +00:00
Rafael Espindola
a01cdb0e37
Add 129518 back with a fix for when we are producing eh just because of debug info.
...
Change ELF systems to use CFI for producing the EH tables. This reduces the
size of the clang binary in Debug builds from 690MB to 679MB.
llvm-svn: 129571
2011-04-15 15:11:06 +00:00
Chris Lattner
0ab5e2cded
Fix a ton of comment typos found by codespell. Patch by
...
Luis Felipe Strano Moraes!
llvm-svn: 129558
2011-04-15 05:18:47 +00:00
NAKAMURA Takumi
b5e3e9dd27
Revert r129518, "Change ELF systems to use CFI for producing the EH tables. This reduces the"
...
It broke several builds.
llvm-svn: 129557
2011-04-15 03:35:57 +00:00
Rafael Espindola
aa2a7cd828
Change ELF systems to use CFI for producing the EH tables. This reduces the
...
size of the clang binary in Debug builds from 690MB to 679MB.
llvm-svn: 129518
2011-04-14 15:18:53 +00:00
NAKAMURA Takumi
521eb7c11e
Target/X86: [PR8777][PR8778] Tweak alloca/chkstk for Windows targets.
...
FIXME: Some cleanups would be needed.
llvm-svn: 128206
2011-03-24 07:07:00 +00:00
NAKAMURA Takumi
d4e5003a3f
Target/X86: Always emit "push/pop GPRs" in prologue/epilogue and emit "spill/reload frames" for XMMs.
...
It improves Win64's prologue/epilogue but it would not affect ia32 and amd64 (lack of nonvolatile XMMs).
llvm-svn: 126568
2011-02-27 08:47:19 +00:00
NAKAMURA Takumi
1850c80afb
Target/X86: Tweak allocating shadow area (aka home) on Win64. It must be enough for caller to allocate one.
...
llvm-svn: 124949
2011-02-05 15:11:32 +00:00
NAKAMURA Takumi
f7f319d4d3
Target/X86: Fix whitespace.
...
llvm-svn: 124946
2011-02-05 15:10:54 +00:00
Carl Norum
ecd90b5946
Test commit - fix a double 'should' in a comment.
...
llvm-svn: 124652
2011-02-01 07:38:42 +00:00
Evan Cheng
d22a4a1fd6
Patches to build EFI with Clang/LLVM. By Carl Norum.
...
llvm-svn: 124639
2011-02-01 01:14:13 +00:00
Anton Korobeynikov
4d9de6be4b
Cleanup
...
llvm-svn: 123475
2011-01-14 21:57:58 +00:00
Jakob Stoklund Olesen
bbb1a54b84
Fix a few more places that should use MBB::getLastNonDebugInstr().
...
llvm-svn: 123408
2011-01-13 22:47:43 +00:00
Jakob Stoklund Olesen
4bc5e38960
Teach frame lowering to ignore debug values after the terminators.
...
llvm-svn: 123399
2011-01-13 21:28:52 +00:00
Anton Korobeynikov
2f93128109
Rename TargetFrameInfo into TargetFrameLowering. Also, put couple of FIXMEs and fixes here and there.
...
llvm-svn: 123170
2011-01-10 12:39:04 +00:00