[llvm] r284875 - AMDGPU/SI: Fix crash caused by r284267

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 21 13:25:11 PDT 2016


Author: tstellar
Date: Fri Oct 21 15:25:11 2016
New Revision: 284875

URL: http://llvm.org/viewvc/llvm-project?rev=284875&view=rev
Log:
AMDGPU/SI: Fix crash caused by r284267

Reviewers: arsenm, nhaehnle

Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, tony-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D25782

Modified:
    llvm/trunk/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
    llvm/trunk/test/CodeGen/AMDGPU/mul_int24.ll

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUISelLowering.cpp?rev=284875&r1=284874&r2=284875&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUISelLowering.cpp Fri Oct 21 15:25:11 2016
@@ -2631,8 +2631,9 @@ SDValue AMDGPUTargetLowering::PerformDAG
   case AMDGPUISD::MUL_U24:
   case AMDGPUISD::MULHI_I24:
   case AMDGPUISD::MULHI_U24: {
-    simplifyI24(N, 0, DCI);
-    simplifyI24(N, 1, DCI);
+    // If the first call to simplify is successfull, then N may end up being
+    // deleted, so we shouldn't call simplifyI24 again.
+    simplifyI24(N, 0, DCI) || simplifyI24(N, 1, DCI);
     return SDValue();
   }
   case AMDGPUISD::MUL_LOHI_I24:

Modified: llvm/trunk/test/CodeGen/AMDGPU/mul_int24.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/mul_int24.ll?rev=284875&r1=284874&r2=284875&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/mul_int24.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/mul_int24.ll Fri Oct 21 15:25:11 2016
@@ -146,4 +146,29 @@ entry:
   store i32 %trunc, i32 addrspace(1)* %out
   ret void
 }
+
+; GCN-LABEL: {{^}}simplify_i24_crash:
+; GCN: v_mul_i32_i24_e32 v[[VAL_LO:[0-9]+]]
+; GCN: v_mov_b32_e32 v[[VAL_HI:[0-9]+]], v[[VAL_LO]]
+; GCN: buffer_store_dwordx2 v{{\[}}[[VAL_LO]]:[[VAL_HI]]{{\]}}
+define void @simplify_i24_crash(<2 x i32> addrspace(1)* %out, i32 %arg0, <2 x i32> %arg1, <2 x i32> %arg2) {
+bb:
+  %cmp = icmp eq i32 %arg0, 0
+  br i1 %cmp, label %bb11, label %bb7
+
+bb11:
+  %tmp14 = shufflevector <2 x i32> %arg1, <2 x i32> undef, <2 x i32> zeroinitializer
+  %tmp16 = shufflevector <2 x i32> %arg2, <2 x i32> undef, <2 x i32> zeroinitializer
+  %tmp17 = shl <2 x i32> %tmp14, <i32 8, i32 8>
+  %tmp18 = ashr <2 x i32> %tmp17, <i32 8, i32 8>
+  %tmp19 = shl <2 x i32> %tmp16, <i32 8, i32 8>
+  %tmp20 = ashr <2 x i32> %tmp19, <i32 8, i32 8>
+  %tmp21 = mul <2 x i32> %tmp18, %tmp20
+  store <2 x i32> %tmp21, <2 x i32> addrspace(1)* %out
+  br label %bb7
+
+bb7:
+  ret void
+
+}
 attributes #0 = { nounwind }




More information about the llvm-commits mailing list