PPC: Add a better comment about the i64 FI fixup
authorHal Finkel <hfinkel@anl.gov>
Wed, 10 Jul 2013 15:29:01 +0000 (15:29 +0000)
committerHal Finkel <hfinkel@anl.gov>
Wed, 10 Jul 2013 15:29:01 +0000 (15:29 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186005 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCISelLowering.cpp

index 791d33406caf007bca8ddc71e5c8cb59b5f197cf..b39f0d53670bf94ef35b58cf1d5714b984ef4109 100644 (file)
@@ -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;