GlobalISel: Fail expansion of G_DYN_STACKALLOC for StackGrowsUp
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Sat, 30 May 2020 14:54:43 +0000 (10:54 -0400)
committerMatt Arsenault <arsenm2@gmail.com>
Wed, 3 Jun 2020 23:56:07 +0000 (19:56 -0400)
llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

index 189c645..6d39b1f 100644 (file)
@@ -5029,16 +5029,19 @@ LegalizerHelper::lowerShuffleVector(MachineInstr &MI) {
 
 LegalizerHelper::LegalizeResult
 LegalizerHelper::lowerDynStackAlloc(MachineInstr &MI) {
+  const auto &MF = *MI.getMF();
+  const auto &TFI = *MF.getSubtarget().getFrameLowering();
+  if (TFI.getStackGrowthDirection() == TargetFrameLowering::StackGrowsUp)
+    return UnableToLegalize;
+
   Register Dst = MI.getOperand(0).getReg();
   Register AllocSize = MI.getOperand(1).getReg();
   Align Alignment = assumeAligned(MI.getOperand(2).getImm());
 
-  const auto &MF = *MI.getMF();
-  const auto &TLI = *MF.getSubtarget().getTargetLowering();
-
   LLT PtrTy = MRI.getType(Dst);
   LLT IntPtrTy = LLT::scalar(PtrTy.getSizeInBits());
 
+  const auto &TLI = *MF.getSubtarget().getTargetLowering();
   Register SPReg = TLI.getStackPointerRegisterToSaveRestore();
   auto SPTmp = MIRBuilder.buildCopy(PtrTy, SPReg);
   SPTmp = MIRBuilder.buildCast(IntPtrTy, SPTmp);