blob: b5c8b2f2929255e3d3bf4d39ca902b6a22e0d51c [file]
; RUN: llc < %s -mattr=+ptx72 | FileCheck %s
;
;; Test inlining of a C++ constructor with control flow - verifies that inlined_at
;; information is correctly emitted when a constructor containing loops and conditionals is inlined.
;
; __device__ int gg;
; __device__ int *arr;
;
; class C {
; int priv;
; public: __device__ C();
; __device__ C(int);
; __device__ int get() const;
; };
;
;
; __device__ C::C() : priv(1) {
; int sum = 0;
; for (int i = 0; i < gg; ++i) sum += arr[i];
; if (sum > 17)
; priv = sum;
; }
;
; __device__ C::C(int n) : priv(n) {}
;
; __device__ int C::get() const { return priv; }
;
; __global__ void kernel(int n) {
; C c1;
; if (n > 7)
; gg = c1.get();
; }
;
; CHECK: .loc [[FILENUM:[1-9]]] 24
; CHECK: .loc [[FILENUM]] 14 {{[0-9]*}}, function_name [[CTORNAME:\$L__info_string[0-9]+]], inlined_at [[FILENUM]] 24
; CHECK: .section .debug_str
; CHECK: {
; CHECK: [[CTORNAME]]:
; CHECK-NEXT: // {{.*}} _ZN1CC1Ev
; CHECK: }
source_filename = "<unnamed>"
target datalayout = "e-p:64:64:64-p3:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-f128:128:128-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64-a:8:8-p6:32:32"
target triple = "nvptx64-nvidia-cuda"
@gg = internal addrspace(1) global i32 0, align 4
@arr = internal addrspace(1) global ptr null, align 8
@llvm.used = appending global [3 x ptr] [ptr @_Z6kerneli, ptr addrspacecast (ptr addrspace(1) @arr to ptr), ptr addrspacecast (ptr addrspace(1) @gg to ptr)], section "llvm.metadata"
define void @_Z6kerneli(i32 noundef %n) !dbg !4 {
entry:
%tmp3.i1 = load i32, ptr addrspace(1) @gg, align 4, !dbg !6
%cmp.i2 = icmp sgt i32 %tmp3.i1, 0, !dbg !6
br i1 %cmp.i2, label %for.body.i.preheader, label %for.end.i, !dbg !6
for.body.i.preheader: ; preds = %entry
%tmp4.i = load ptr, ptr addrspace(1) @arr, align 8
%0 = addrspacecast ptr %tmp4.i to ptr addrspace(1)
%xtraiter = and i32 %tmp3.i1, 15, !dbg !6
%1 = icmp samesign ult i32 %tmp3.i1, 16, !dbg !6
br i1 %1, label %for.end.i.loopexit.unr-lcssa, label %for.body.i.preheader.new, !dbg !6
for.body.i.preheader.new: ; preds = %for.body.i.preheader
%unroll_iter = and i32 %tmp3.i1, 2147483632, !dbg !6
br label %for.body.i, !dbg !6
for.body.i: ; preds = %for.body.i, %for.body.i.preheader.new
%i.0.i4 = phi i32 [ 0, %for.body.i.preheader.new ], [ %inc.i.15, %for.body.i ]
%sum.0.i3 = phi i32 [ 0, %for.body.i.preheader.new ], [ %add.i.15, %for.body.i ]
%niter = phi i32 [ 0, %for.body.i.preheader.new ], [ %niter.next.15, %for.body.i ]
%2 = zext nneg i32 %i.0.i4 to i64, !dbg !6
%getElem = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %2, !dbg !6
%tmp6.i = load i32, ptr addrspace(1) %getElem, align 4, !dbg !6
%add.i = add nsw i32 %tmp6.i, %sum.0.i3, !dbg !6
%inc.i = add nuw nsw i32 %i.0.i4, 1, !dbg !6
%3 = zext nneg i32 %inc.i to i64, !dbg !6
%getElem.1 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %3, !dbg !6
%tmp6.i.1 = load i32, ptr addrspace(1) %getElem.1, align 4, !dbg !6
%add.i.1 = add nsw i32 %tmp6.i.1, %add.i, !dbg !6
%inc.i.1 = add nuw nsw i32 %i.0.i4, 2, !dbg !6
%4 = zext nneg i32 %inc.i.1 to i64, !dbg !6
%getElem.2 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %4, !dbg !6
%tmp6.i.2 = load i32, ptr addrspace(1) %getElem.2, align 4, !dbg !6
%add.i.2 = add nsw i32 %tmp6.i.2, %add.i.1, !dbg !6
%inc.i.2 = add nuw nsw i32 %i.0.i4, 3, !dbg !6
%5 = zext nneg i32 %inc.i.2 to i64, !dbg !6
%getElem.3 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %5, !dbg !6
%tmp6.i.3 = load i32, ptr addrspace(1) %getElem.3, align 4, !dbg !6
%add.i.3 = add nsw i32 %tmp6.i.3, %add.i.2, !dbg !6
%inc.i.3 = add nuw nsw i32 %i.0.i4, 4, !dbg !6
%6 = zext nneg i32 %inc.i.3 to i64, !dbg !6
%getElem.4 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %6, !dbg !6
%tmp6.i.4 = load i32, ptr addrspace(1) %getElem.4, align 4, !dbg !6
%add.i.4 = add nsw i32 %tmp6.i.4, %add.i.3, !dbg !6
%inc.i.4 = add nuw nsw i32 %i.0.i4, 5, !dbg !6
%7 = zext nneg i32 %inc.i.4 to i64, !dbg !6
%getElem.5 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %7, !dbg !6
%tmp6.i.5 = load i32, ptr addrspace(1) %getElem.5, align 4, !dbg !6
%add.i.5 = add nsw i32 %tmp6.i.5, %add.i.4, !dbg !6
%inc.i.5 = add nuw nsw i32 %i.0.i4, 6, !dbg !6
%8 = zext nneg i32 %inc.i.5 to i64, !dbg !6
%getElem.6 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %8, !dbg !6
%tmp6.i.6 = load i32, ptr addrspace(1) %getElem.6, align 4, !dbg !6
%add.i.6 = add nsw i32 %tmp6.i.6, %add.i.5, !dbg !6
%inc.i.6 = add nuw nsw i32 %i.0.i4, 7, !dbg !6
%9 = zext nneg i32 %inc.i.6 to i64, !dbg !6
%getElem.7 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %9, !dbg !6
%tmp6.i.7 = load i32, ptr addrspace(1) %getElem.7, align 4, !dbg !6
%add.i.7 = add nsw i32 %tmp6.i.7, %add.i.6, !dbg !6
%inc.i.7 = add nuw nsw i32 %i.0.i4, 8, !dbg !6
%10 = zext nneg i32 %inc.i.7 to i64, !dbg !6
%getElem.8 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %10, !dbg !6
%tmp6.i.8 = load i32, ptr addrspace(1) %getElem.8, align 4, !dbg !6
%add.i.8 = add nsw i32 %tmp6.i.8, %add.i.7, !dbg !6
%inc.i.8 = add nuw nsw i32 %i.0.i4, 9, !dbg !6
%11 = zext nneg i32 %inc.i.8 to i64, !dbg !6
%getElem.9 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %11, !dbg !6
%tmp6.i.9 = load i32, ptr addrspace(1) %getElem.9, align 4, !dbg !6
%add.i.9 = add nsw i32 %tmp6.i.9, %add.i.8, !dbg !6
%inc.i.9 = add nuw nsw i32 %i.0.i4, 10, !dbg !6
%12 = zext nneg i32 %inc.i.9 to i64, !dbg !6
%getElem.10 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %12, !dbg !6
%tmp6.i.10 = load i32, ptr addrspace(1) %getElem.10, align 4, !dbg !6
%add.i.10 = add nsw i32 %tmp6.i.10, %add.i.9, !dbg !6
%inc.i.10 = add nuw nsw i32 %i.0.i4, 11, !dbg !6
%13 = zext nneg i32 %inc.i.10 to i64, !dbg !6
%getElem.11 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %13, !dbg !6
%tmp6.i.11 = load i32, ptr addrspace(1) %getElem.11, align 4, !dbg !6
%add.i.11 = add nsw i32 %tmp6.i.11, %add.i.10, !dbg !6
%inc.i.11 = add nuw nsw i32 %i.0.i4, 12, !dbg !6
%14 = zext nneg i32 %inc.i.11 to i64, !dbg !6
%getElem.12 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %14, !dbg !6
%tmp6.i.12 = load i32, ptr addrspace(1) %getElem.12, align 4, !dbg !6
%add.i.12 = add nsw i32 %tmp6.i.12, %add.i.11, !dbg !6
%inc.i.12 = add nuw nsw i32 %i.0.i4, 13, !dbg !6
%15 = zext nneg i32 %inc.i.12 to i64, !dbg !6
%getElem.13 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %15, !dbg !6
%tmp6.i.13 = load i32, ptr addrspace(1) %getElem.13, align 4, !dbg !6
%add.i.13 = add nsw i32 %tmp6.i.13, %add.i.12, !dbg !6
%inc.i.13 = add nuw nsw i32 %i.0.i4, 14, !dbg !6
%16 = zext nneg i32 %inc.i.13 to i64, !dbg !6
%getElem.14 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %16, !dbg !6
%tmp6.i.14 = load i32, ptr addrspace(1) %getElem.14, align 4, !dbg !6
%add.i.14 = add nsw i32 %tmp6.i.14, %add.i.13, !dbg !6
%inc.i.14 = add nuw nsw i32 %i.0.i4, 15, !dbg !6
%17 = zext nneg i32 %inc.i.14 to i64, !dbg !6
%getElem.15 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %17, !dbg !6
%tmp6.i.15 = load i32, ptr addrspace(1) %getElem.15, align 4, !dbg !6
%add.i.15 = add nsw i32 %tmp6.i.15, %add.i.14, !dbg !6
%inc.i.15 = add nuw nsw i32 %i.0.i4, 16, !dbg !6
%niter.next.15 = add i32 %niter, 16, !dbg !6
%niter.ncmp.15.not = icmp eq i32 %niter.next.15, %unroll_iter, !dbg !6
br i1 %niter.ncmp.15.not, label %for.end.i.loopexit.unr-lcssa, label %for.body.i, !dbg !6, !llvm.loop !11
for.end.i.loopexit.unr-lcssa: ; preds = %for.body.i, %for.body.i.preheader
%add.i.lcssa.ph = phi i32 [ poison, %for.body.i.preheader ], [ %add.i.15, %for.body.i ]
%i.0.i4.unr = phi i32 [ 0, %for.body.i.preheader ], [ %inc.i.15, %for.body.i ]
%sum.0.i3.unr = phi i32 [ 0, %for.body.i.preheader ], [ %add.i.15, %for.body.i ]
%lcmp.mod.not = icmp eq i32 %xtraiter, 0, !dbg !6
br i1 %lcmp.mod.not, label %for.end.i, label %for.body.i.epil.preheader, !dbg !6
for.body.i.epil.preheader: ; preds = %for.end.i.loopexit.unr-lcssa
%xtraiter6 = and i32 %tmp3.i1, 7, !dbg !6
%18 = icmp samesign ult i32 %xtraiter, 8, !dbg !6
br i1 %18, label %for.end.i.loopexit.epilog-lcssa.unr-lcssa, label %for.body.i.epil, !dbg !6
for.body.i.epil: ; preds = %for.body.i.epil.preheader
%19 = zext nneg i32 %i.0.i4.unr to i64, !dbg !6
%getElem.epil = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %19, !dbg !6
%tmp6.i.epil = load i32, ptr addrspace(1) %getElem.epil, align 4, !dbg !6
%add.i.epil = add nsw i32 %tmp6.i.epil, %sum.0.i3.unr, !dbg !6
%inc.i.epil = add nuw nsw i32 %i.0.i4.unr, 1, !dbg !6
%20 = zext nneg i32 %inc.i.epil to i64, !dbg !6
%getElem.epil.1 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %20, !dbg !6
%tmp6.i.epil.1 = load i32, ptr addrspace(1) %getElem.epil.1, align 4, !dbg !6
%add.i.epil.1 = add nsw i32 %tmp6.i.epil.1, %add.i.epil, !dbg !6
%inc.i.epil.1 = add nuw nsw i32 %i.0.i4.unr, 2, !dbg !6
%21 = zext nneg i32 %inc.i.epil.1 to i64, !dbg !6
%getElem.epil.2 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %21, !dbg !6
%tmp6.i.epil.2 = load i32, ptr addrspace(1) %getElem.epil.2, align 4, !dbg !6
%add.i.epil.2 = add nsw i32 %tmp6.i.epil.2, %add.i.epil.1, !dbg !6
%inc.i.epil.2 = add nuw nsw i32 %i.0.i4.unr, 3, !dbg !6
%22 = zext nneg i32 %inc.i.epil.2 to i64, !dbg !6
%getElem.epil.3 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %22, !dbg !6
%tmp6.i.epil.3 = load i32, ptr addrspace(1) %getElem.epil.3, align 4, !dbg !6
%add.i.epil.3 = add nsw i32 %tmp6.i.epil.3, %add.i.epil.2, !dbg !6
%inc.i.epil.3 = add nuw nsw i32 %i.0.i4.unr, 4, !dbg !6
%23 = zext nneg i32 %inc.i.epil.3 to i64, !dbg !6
%getElem.epil.4 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %23, !dbg !6
%tmp6.i.epil.4 = load i32, ptr addrspace(1) %getElem.epil.4, align 4, !dbg !6
%add.i.epil.4 = add nsw i32 %tmp6.i.epil.4, %add.i.epil.3, !dbg !6
%inc.i.epil.4 = add nuw nsw i32 %i.0.i4.unr, 5, !dbg !6
%24 = zext nneg i32 %inc.i.epil.4 to i64, !dbg !6
%getElem.epil.5 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %24, !dbg !6
%tmp6.i.epil.5 = load i32, ptr addrspace(1) %getElem.epil.5, align 4, !dbg !6
%add.i.epil.5 = add nsw i32 %tmp6.i.epil.5, %add.i.epil.4, !dbg !6
%inc.i.epil.5 = add nuw nsw i32 %i.0.i4.unr, 6, !dbg !6
%25 = zext nneg i32 %inc.i.epil.5 to i64, !dbg !6
%getElem.epil.6 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %25, !dbg !6
%tmp6.i.epil.6 = load i32, ptr addrspace(1) %getElem.epil.6, align 4, !dbg !6
%add.i.epil.6 = add nsw i32 %tmp6.i.epil.6, %add.i.epil.5, !dbg !6
%inc.i.epil.6 = add nuw nsw i32 %i.0.i4.unr, 7, !dbg !6
%26 = zext nneg i32 %inc.i.epil.6 to i64, !dbg !6
%getElem.epil.7 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %26, !dbg !6
%tmp6.i.epil.7 = load i32, ptr addrspace(1) %getElem.epil.7, align 4, !dbg !6
%add.i.epil.7 = add nsw i32 %tmp6.i.epil.7, %add.i.epil.6, !dbg !6
%inc.i.epil.7 = add nuw nsw i32 %i.0.i4.unr, 8, !dbg !6
br label %for.end.i.loopexit.epilog-lcssa.unr-lcssa, !dbg !6
for.end.i.loopexit.epilog-lcssa.unr-lcssa: ; preds = %for.body.i.epil, %for.body.i.epil.preheader
%add.i.lcssa.ph5.ph = phi i32 [ poison, %for.body.i.epil.preheader ], [ %add.i.epil.7, %for.body.i.epil ]
%i.0.i4.epil.unr = phi i32 [ %i.0.i4.unr, %for.body.i.epil.preheader ], [ %inc.i.epil.7, %for.body.i.epil ]
%sum.0.i3.epil.unr = phi i32 [ %sum.0.i3.unr, %for.body.i.epil.preheader ], [ %add.i.epil.7, %for.body.i.epil ]
%lcmp.mod8.not = icmp eq i32 %xtraiter6, 0, !dbg !6
br i1 %lcmp.mod8.not, label %for.end.i, label %for.body.i.epil.epil.preheader, !dbg !6
for.body.i.epil.epil.preheader: ; preds = %for.end.i.loopexit.epilog-lcssa.unr-lcssa
%xtraiter12 = and i32 %tmp3.i1, 3, !dbg !6
%27 = icmp samesign ult i32 %xtraiter6, 4, !dbg !6
br i1 %27, label %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa, label %for.body.i.epil.epil, !dbg !6
for.body.i.epil.epil: ; preds = %for.body.i.epil.epil.preheader
%28 = zext nneg i32 %i.0.i4.epil.unr to i64, !dbg !6
%getElem.epil.epil = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %28, !dbg !6
%tmp6.i.epil.epil = load i32, ptr addrspace(1) %getElem.epil.epil, align 4, !dbg !6
%add.i.epil.epil = add nsw i32 %tmp6.i.epil.epil, %sum.0.i3.epil.unr, !dbg !6
%inc.i.epil.epil = add nuw nsw i32 %i.0.i4.epil.unr, 1, !dbg !6
%29 = zext nneg i32 %inc.i.epil.epil to i64, !dbg !6
%getElem.epil.epil.1 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %29, !dbg !6
%tmp6.i.epil.epil.1 = load i32, ptr addrspace(1) %getElem.epil.epil.1, align 4, !dbg !6
%add.i.epil.epil.1 = add nsw i32 %tmp6.i.epil.epil.1, %add.i.epil.epil, !dbg !6
%inc.i.epil.epil.1 = add nuw nsw i32 %i.0.i4.epil.unr, 2, !dbg !6
%30 = zext nneg i32 %inc.i.epil.epil.1 to i64, !dbg !6
%getElem.epil.epil.2 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %30, !dbg !6
%tmp6.i.epil.epil.2 = load i32, ptr addrspace(1) %getElem.epil.epil.2, align 4, !dbg !6
%add.i.epil.epil.2 = add nsw i32 %tmp6.i.epil.epil.2, %add.i.epil.epil.1, !dbg !6
%inc.i.epil.epil.2 = add nuw nsw i32 %i.0.i4.epil.unr, 3, !dbg !6
%31 = zext nneg i32 %inc.i.epil.epil.2 to i64, !dbg !6
%getElem.epil.epil.3 = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %31, !dbg !6
%tmp6.i.epil.epil.3 = load i32, ptr addrspace(1) %getElem.epil.epil.3, align 4, !dbg !6
%add.i.epil.epil.3 = add nsw i32 %tmp6.i.epil.epil.3, %add.i.epil.epil.2, !dbg !6
%inc.i.epil.epil.3 = add nuw nsw i32 %i.0.i4.epil.unr, 4, !dbg !6
br label %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa, !dbg !6
for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa: ; preds = %for.body.i.epil.epil, %for.body.i.epil.epil.preheader
%add.i.lcssa.ph5.ph9.ph = phi i32 [ poison, %for.body.i.epil.epil.preheader ], [ %add.i.epil.epil.3, %for.body.i.epil.epil ]
%i.0.i4.epil.epil.unr = phi i32 [ %i.0.i4.epil.unr, %for.body.i.epil.epil.preheader ], [ %inc.i.epil.epil.3, %for.body.i.epil.epil ]
%sum.0.i3.epil.epil.unr = phi i32 [ %sum.0.i3.epil.unr, %for.body.i.epil.epil.preheader ], [ %add.i.epil.epil.3, %for.body.i.epil.epil ]
%lcmp.mod14.not = icmp eq i32 %xtraiter12, 0, !dbg !6
br i1 %lcmp.mod14.not, label %for.end.i, label %for.body.i.epil.epil.epil, !dbg !6
for.body.i.epil.epil.epil: ; preds = %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa, %for.body.i.epil.epil.epil
%i.0.i4.epil.epil.epil = phi i32 [ %inc.i.epil.epil.epil, %for.body.i.epil.epil.epil ], [ %i.0.i4.epil.epil.unr, %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa ]
%sum.0.i3.epil.epil.epil = phi i32 [ %add.i.epil.epil.epil, %for.body.i.epil.epil.epil ], [ %sum.0.i3.epil.epil.unr, %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa ]
%epil.iter13 = phi i32 [ %epil.iter13.next, %for.body.i.epil.epil.epil ], [ 0, %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa ]
%32 = zext nneg i32 %i.0.i4.epil.epil.epil to i64, !dbg !6
%getElem.epil.epil.epil = getelementptr inbounds nuw i32, ptr addrspace(1) %0, i64 %32, !dbg !6
%tmp6.i.epil.epil.epil = load i32, ptr addrspace(1) %getElem.epil.epil.epil, align 4, !dbg !6
%add.i.epil.epil.epil = add nsw i32 %tmp6.i.epil.epil.epil, %sum.0.i3.epil.epil.epil, !dbg !6
%inc.i.epil.epil.epil = add nuw nsw i32 %i.0.i4.epil.epil.epil, 1, !dbg !6
%epil.iter13.next = add i32 %epil.iter13, 1, !dbg !6
%epil.iter13.cmp.not = icmp eq i32 %epil.iter13.next, %xtraiter12, !dbg !6
br i1 %epil.iter13.cmp.not, label %for.end.i, label %for.body.i.epil.epil.epil, !dbg !6, !llvm.loop !14
for.end.i: ; preds = %for.body.i.epil.epil.epil, %for.end.i.loopexit.unr-lcssa, %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa, %for.end.i.loopexit.epilog-lcssa.unr-lcssa, %entry
%sum.0.i.lcssa = phi i32 [ 0, %entry ], [ %add.i.lcssa.ph, %for.end.i.loopexit.unr-lcssa ], [ %add.i.lcssa.ph5.ph, %for.end.i.loopexit.epilog-lcssa.unr-lcssa ], [ %add.i.lcssa.ph5.ph9.ph, %for.end.i.loopexit.epilog-lcssa.epilog-lcssa.unr-lcssa ], [ %add.i.epil.epil.epil, %for.body.i.epil.epil.epil ], !dbg !6
%cmp10.i = icmp sgt i32 %sum.0.i.lcssa, 17, !dbg !15
%spec.select = select i1 %cmp10.i, i32 %sum.0.i.lcssa, i32 1, !dbg !15
%cmp = icmp sgt i32 %n, 7, !dbg !16
br i1 %cmp, label %if.then, label %if.end, !dbg !16
if.then: ; preds = %for.end.i
store i32 %spec.select, ptr addrspace(1) @gg, align 4, !dbg !17
br label %if.end, !dbg !17
if.end: ; preds = %if.then, %for.end.i
ret void, !dbg !19
}
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: DebugDirectivesOnly)
!1 = !DIFile(filename: "t3.cu", directory: "")
!2 = !{}
!3 = !{i32 1, !"Debug Info Version", i32 3}
!4 = distinct !DISubprogram(name: "kernel", linkageName: "_Z6kerneli", scope: !1, file: !1, line: 23, type: !5, scopeLine: 23, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
!5 = !DISubroutineType(types: !2)
!6 = !DILocation(line: 14, column: 3, scope: !7, inlinedAt: !9)
!7 = distinct !DILexicalBlock(scope: !8, file: !1, line: 12, column: 27)
!8 = distinct !DISubprogram(name: "C", linkageName: "_ZN1CC1Ev", scope: !1, file: !1, line: 12, type: !5, scopeLine: 12, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0)
!9 = distinct !DILocation(line: 24, column: 3, scope: !10)
!10 = distinct !DILexicalBlock(scope: !4, file: !1, line: 23, column: 29)
!11 = distinct !{!11, !12, !13}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.unroll.disable"}
!14 = distinct !{!14, !13}
!15 = !DILocation(line: 15, column: 3, scope: !7, inlinedAt: !9)
!16 = !DILocation(line: 25, column: 3, scope: !10)
!17 = !DILocation(line: 26, column: 5, scope: !18)
!18 = distinct !DILexicalBlock(scope: !10, file: !1, line: 25, column: 3)
!19 = !DILocation(line: 27, column: 1, scope: !10)