summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86InstrInfo.cpp
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2007-06-13 05:51:31 +0000
committerDuncan Sands <baldrick@free.fr>2007-06-13 05:51:31 +0000
commit97f7236e70e314c7f87d754d1c1cbd0dfe2cf6e1 (patch)
treeb061e0eb08680607255f763f422b615dd4482742 /llvm/lib/Target/X86/X86InstrInfo.cpp
parentcbaaff58bf16a480f61d286eea8acd376fe15c1a (diff)
downloadbcm5719-llvm-97f7236e70e314c7f87d754d1c1cbd0dfe2cf6e1.tar.gz
bcm5719-llvm-97f7236e70e314c7f87d754d1c1cbd0dfe2cf6e1.zip
The fix that was applied for PR1224 stops the compiler
crashing but breaks exception handling. The problem described in PR1224 is that invoke is a terminator that can produce a value. The value may be needed in other blocks. The code that writes to registers values needed in other blocks runs before terminators are lowered (in this case invoke) so asserted because the value was not yet available. The fix that was applied was to do invoke lowering earlier, before writing values to registers. The problem this causes is that the code to copy values to registers can be output after the invoke call. If an exception is raised and control is passed to the landing pad then this copy-code will never execute. If the value is needed in some code path reached via the landing pad then that code will get something bogus. So revert the original fix and simply skip invoke values in the general copying to registers code. Instead copy the invoke value to a register in the invoke lowering code. llvm-svn: 37567
Diffstat (limited to 'llvm/lib/Target/X86/X86InstrInfo.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud