[llvm-branch-commits] [llvm-branch] r271484 - Merging r258537:

Tom Stellard via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Jun 1 21:32:15 PDT 2016


Author: tstellar
Date: Wed Jun  1 23:32:15 2016
New Revision: 271484

URL: http://llvm.org/viewvc/llvm-project?rev=271484&view=rev
Log:
Merging r258537:

------------------------------------------------------------------------
r258537 | Matthew.Arsenault | 2016-01-22 11:47:54 -0800 (Fri, 22 Jan 2016) | 6 lines

AMDGPU: Fix crash with invariant markers

The promote alloca pass didn't handle these intrinsics and crashed.
These intrinsics should accept any address space, but for now just
erase them to avoid breaking.

------------------------------------------------------------------------

Added:
    llvm/branches/release_38/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll
Modified:
    llvm/branches/release_38/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp

Modified: llvm/branches/release_38/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp?rev=271484&r1=271483&r2=271484&view=diff
==============================================================================
--- llvm/branches/release_38/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp (original)
+++ llvm/branches/release_38/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp Wed Jun  1 23:32:15 2016
@@ -413,6 +413,14 @@ void AMDGPUPromoteAlloca::visitAlloca(Al
       Intr->eraseFromParent();
       continue;
     }
+    case Intrinsic::invariant_start:
+    case Intrinsic::invariant_end:
+    case Intrinsic::invariant_group_barrier:
+      Intr->eraseFromParent();
+      // FIXME: I think the invariant marker should still theoretically apply,
+      // but the intrinsics need to be changed to accept pointers with any
+      // address space.
+      continue;
     default:
       Intr->dump();
       llvm_unreachable("Don't know how to promote alloca intrinsic use.");

Added: llvm/branches/release_38/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_38/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll?rev=271484&view=auto
==============================================================================
--- llvm/branches/release_38/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll (added)
+++ llvm/branches/release_38/test/CodeGen/AMDGPU/promote-alloca-invariant-markers.ll Wed Jun  1 23:32:15 2016
@@ -0,0 +1,25 @@
+; RUN: llc -march=amdgcn -mattr=+promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
+
+declare {}* @llvm.invariant.start(i64, i8* nocapture) #0
+declare void @llvm.invariant.end({}*, i64, i8* nocapture) #0
+declare i8* @llvm.invariant.group.barrier(i8*) #1
+
+; GCN-LABEL: {{^}}use_invariant_promotable_lds:
+; GCN: buffer_load_dword
+; GCN: ds_write_b32
+define void @use_invariant_promotable_lds(i32 addrspace(1)* %arg) #2 {
+bb:
+  %tmp = alloca i32, align 4
+  %tmp1 = bitcast i32* %tmp to i8*
+  %tmp2 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 1
+  %tmp3 = load i32, i32 addrspace(1)* %tmp2
+  store i32 %tmp3, i32* %tmp
+  %tmp4 = call {}* @llvm.invariant.start(i64 4, i8* %tmp1) #0
+  call void @llvm.invariant.end({}* %tmp4, i64 4, i8* %tmp1) #0
+  %tmp5 = call i8* @llvm.invariant.group.barrier(i8* %tmp1) #1
+  ret void
+}
+
+attributes #0 = { argmemonly nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind }




More information about the llvm-branch-commits mailing list