summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-07-10 15:29:01 +0000
committerHal Finkel <hfinkel@anl.gov>2013-07-10 15:29:01 +0000
commit7ab3db52d3844bd5ad23f124aedac98ae8110d81 (patch)
tree708fd78138a4b8a202d84270dec1bd0be1b6106d /llvm/lib/Target/PowerPC/PPCISelLowering.cpp
parent92408386556d4dbf281e7dbf8b8274ee4fdb057a (diff)
downloadbcm5719-llvm-7ab3db52d3844bd5ad23f124aedac98ae8110d81.tar.gz
bcm5719-llvm-7ab3db52d3844bd5ad23f124aedac98ae8110d81.zip
PPC: Add a better comment about the i64 FI fixup
In discussing this change with Bill Schmidt, it was decided that the original comment about negative FIs was incorrect. We'll still exclude them for now, but now with a more-accurate explanation. llvm-svn: 186005
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelLowering.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 791d33406ca..b39f0d53670 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -1043,8 +1043,19 @@ static void fixupFuncForFI(SelectionDAG &DAG, int FrameIdx, EVT VT) {
if (VT != MVT::i64)
return;
- // This should not be needed for negative FIs, which come from argument
- // lowering, because the ABI should guarentee the necessary alignment.
+ // NOTE: We'll exclude negative FIs here, which come from argument
+ // lowering, because there are no known test cases triggering this problem
+ // using packed structures (or similar). We can remove this exclusion if
+ // we find such a test case. The reason why this is so test-case driven is
+ // because this entire 'fixup' is only to prevent crashes (from the
+ // register scavenger) on not-really-valid inputs. For example, if we have:
+ // %a = alloca i1
+ // %b = bitcast i1* %a to i64*
+ // store i64* a, i64 b
+ // then the store should really be marked as 'align 1', but is not. If it
+ // were marked as 'align 1' then the indexed form would have been
+ // instruction-selected initially, and the problem this 'fixup' is preventing
+ // won't happen regardless.
if (FrameIdx < 0)
return;
OpenPOWER on IntegriCloud