; 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 = "" 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)