1; RUN: llc < %s -march=nvptx64 -mcpu=sm_35 | FileCheck %s 2 3target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64" 4target triple = "nvptx64-unknown-unknown" 5 6define void @PR24303(float* %f) { 7; CHECK-LABEL: .visible .entry PR24303( 8; Do not use mov.f or mov.u to convert between float and int. 9; CHECK-NOT: mov.{{f|u}}{{32|64}} %f{{[0-9]+}}, %r{{[0-9]+}} 10; CHECK-NOT: mov.{{f|u}}{{32|64}} %r{{[0-9]+}}, %f{{[0-9]+}} 11entry: 12 %arrayidx1 = getelementptr inbounds float, float* %f, i64 1 13 %0 = load float, float* %f, align 4 14 %1 = load float, float* %arrayidx1, align 4 15 %arrayidx2 = getelementptr inbounds float, float* %f, i64 2 16 %arrayidx3 = getelementptr inbounds float, float* %f, i64 3 17 %2 = load float, float* %arrayidx2, align 4 18 %3 = load float, float* %arrayidx3, align 4 19 %mul.i = fmul float %0, %2 20 %mul4.i = fmul float %1, %3 21 %mul5.i = fmul float %0, %3 22 %mul6.i = fmul float %1, %2 23 %sub.i = fsub float %mul.i, %mul4.i 24 %4 = bitcast float %sub.i to i32 25 %add.i = fadd float %mul6.i, %mul5.i 26 %5 = bitcast float %add.i to i32 27 %6 = tail call float @llvm.nvvm.fabs.f(float %sub.i) #2 28 %7 = fcmp ugt float %6, 0x7FF0000000000000 29 br i1 %7, label %land.lhs.true.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit 30 31land.lhs.true.i: ; preds = %entry 32 %8 = tail call float @llvm.nvvm.fabs.f(float %add.i) #2 33 %9 = fcmp ugt float %8, 0x7FF0000000000000 34 br i1 %9, label %if.then.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit 35 36if.then.i: ; preds = %land.lhs.true.i 37 %10 = tail call float @llvm.nvvm.fabs.f(float %0) #2 38 %11 = fcmp oeq float %10, 0x7FF0000000000000 39 %.pre.i = tail call float @llvm.nvvm.fabs.f(float %1) #2 40 %12 = fcmp oeq float %.pre.i, 0x7FF0000000000000 41 %or.cond.i = or i1 %11, %12 42 br i1 %or.cond.i, label %if.then.14.i, label %if.end.31.i 43 44if.then.14.i: ; preds = %if.then.i 45 %13 = bitcast float %0 to i32 46 %14 = and i32 %13, -2147483648 47 %15 = select i1 %11, i32 1065353216, i32 0 48 %16 = or i32 %15, %14 49 %17 = bitcast i32 %16 to float 50 %18 = bitcast float %1 to i32 51 %19 = and i32 %18, -2147483648 52 %20 = select i1 %12, i32 1065353216, i32 0 53 %21 = or i32 %20, %19 54 %22 = bitcast i32 %21 to float 55 %23 = tail call float @llvm.nvvm.fabs.f(float %2) #2 56 %24 = fcmp ugt float %23, 0x7FF0000000000000 57 br i1 %24, label %if.then.24.i, label %if.end.i 58 59if.then.24.i: ; preds = %if.then.14.i 60 %25 = bitcast float %2 to i32 61 %26 = and i32 %25, -2147483648 62 %27 = bitcast i32 %26 to float 63 br label %if.end.i 64 65if.end.i: ; preds = %if.then.24.i, %if.then.14.i 66 %__c.0.i = phi float [ %27, %if.then.24.i ], [ %2, %if.then.14.i ] 67 %28 = tail call float @llvm.nvvm.fabs.f(float %3) #2 68 %29 = fcmp ugt float %28, 0x7FF0000000000000 69 br i1 %29, label %if.then.28.i, label %if.end.31.i 70 71if.then.28.i: ; preds = %if.end.i 72 %30 = bitcast float %3 to i32 73 %31 = and i32 %30, -2147483648 74 %32 = bitcast i32 %31 to float 75 br label %if.end.31.i 76 77if.end.31.i: ; preds = %if.then.28.i, %if.end.i, %if.then.i 78 %__d.1.i = phi float [ %32, %if.then.28.i ], [ %3, %if.end.i ], [ %3, %if.then.i ] 79 %__c.1.i = phi float [ %__c.0.i, %if.then.28.i ], [ %__c.0.i, %if.end.i ], [ %2, %if.then.i ] 80 %__b.0.i = phi float [ %22, %if.then.28.i ], [ %22, %if.end.i ], [ %1, %if.then.i ] 81 %__a.0.i = phi float [ %17, %if.then.28.i ], [ %17, %if.end.i ], [ %0, %if.then.i ] 82 %__recalc.0.off0.i = phi i1 [ true, %if.then.28.i ], [ true, %if.end.i ], [ false, %if.then.i ] 83 %33 = tail call float @llvm.nvvm.fabs.f(float %__c.1.i) #2 84 %34 = fcmp oeq float %33, 0x7FF0000000000000 85 %.pre6.i = tail call float @llvm.nvvm.fabs.f(float %__d.1.i) #2 86 %35 = fcmp oeq float %.pre6.i, 0x7FF0000000000000 87 %or.cond8.i = or i1 %34, %35 88 br i1 %or.cond8.i, label %if.then.37.i, label %if.end.56.i 89 90if.then.37.i: ; preds = %if.end.31.i 91 %36 = bitcast float %__c.1.i to i32 92 %37 = and i32 %36, -2147483648 93 %38 = select i1 %34, i32 1065353216, i32 0 94 %39 = or i32 %38, %37 95 %40 = bitcast i32 %39 to float 96 %41 = bitcast float %__d.1.i to i32 97 %42 = and i32 %41, -2147483648 98 %43 = select i1 %35, i32 1065353216, i32 0 99 %44 = or i32 %43, %42 100 %45 = bitcast i32 %44 to float 101 %46 = tail call float @llvm.nvvm.fabs.f(float %__a.0.i) #2 102 %47 = fcmp ugt float %46, 0x7FF0000000000000 103 br i1 %47, label %if.then.48.i, label %if.end.50.i 104 105if.then.48.i: ; preds = %if.then.37.i 106 %48 = bitcast float %__a.0.i to i32 107 %49 = and i32 %48, -2147483648 108 %50 = bitcast i32 %49 to float 109 br label %if.end.50.i 110 111if.end.50.i: ; preds = %if.then.48.i, %if.then.37.i 112 %__a.1.i = phi float [ %50, %if.then.48.i ], [ %__a.0.i, %if.then.37.i ] 113 %51 = tail call float @llvm.nvvm.fabs.f(float %__b.0.i) #2 114 %52 = fcmp ugt float %51, 0x7FF0000000000000 115 br i1 %52, label %if.then.53.i, label %if.then.93.i 116 117if.then.53.i: ; preds = %if.end.50.i 118 %53 = bitcast float %__b.0.i to i32 119 %54 = and i32 %53, -2147483648 120 %55 = bitcast i32 %54 to float 121 br label %if.then.93.i 122 123if.end.56.i: ; preds = %if.end.31.i 124 br i1 %__recalc.0.off0.i, label %if.then.93.i, label %land.lhs.true.58.i 125 126land.lhs.true.58.i: ; preds = %if.end.56.i 127 %56 = tail call float @llvm.nvvm.fabs.f(float %mul.i) #2 128 %57 = fcmp oeq float %56, 0x7FF0000000000000 129 br i1 %57, label %if.then.70.i, label %lor.lhs.false.61.i 130 131lor.lhs.false.61.i: ; preds = %land.lhs.true.58.i 132 %58 = tail call float @llvm.nvvm.fabs.f(float %mul4.i) #2 133 %59 = fcmp oeq float %58, 0x7FF0000000000000 134 br i1 %59, label %if.then.70.i, label %lor.lhs.false.64.i 135 136lor.lhs.false.64.i: ; preds = %lor.lhs.false.61.i 137 %60 = tail call float @llvm.nvvm.fabs.f(float %mul5.i) #2 138 %61 = fcmp oeq float %60, 0x7FF0000000000000 139 br i1 %61, label %if.then.70.i, label %lor.lhs.false.67.i 140 141lor.lhs.false.67.i: ; preds = %lor.lhs.false.64.i 142 %62 = tail call float @llvm.nvvm.fabs.f(float %mul6.i) #2 143 %63 = fcmp oeq float %62, 0x7FF0000000000000 144 br i1 %63, label %if.then.70.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit 145 146if.then.70.i: ; preds = %lor.lhs.false.67.i, %lor.lhs.false.64.i, %lor.lhs.false.61.i, %land.lhs.true.58.i 147 %64 = tail call float @llvm.nvvm.fabs.f(float %__a.0.i) #2 148 %65 = fcmp ugt float %64, 0x7FF0000000000000 149 br i1 %65, label %if.then.73.i, label %if.end.75.i 150 151if.then.73.i: ; preds = %if.then.70.i 152 %66 = bitcast float %__a.0.i to i32 153 %67 = and i32 %66, -2147483648 154 %68 = bitcast i32 %67 to float 155 br label %if.end.75.i 156 157if.end.75.i: ; preds = %if.then.73.i, %if.then.70.i 158 %__a.3.i = phi float [ %68, %if.then.73.i ], [ %__a.0.i, %if.then.70.i ] 159 %69 = tail call float @llvm.nvvm.fabs.f(float %__b.0.i) #2 160 %70 = fcmp ugt float %69, 0x7FF0000000000000 161 br i1 %70, label %if.then.78.i, label %if.end.80.i 162 163if.then.78.i: ; preds = %if.end.75.i 164 %71 = bitcast float %__b.0.i to i32 165 %72 = and i32 %71, -2147483648 166 %73 = bitcast i32 %72 to float 167 br label %if.end.80.i 168 169if.end.80.i: ; preds = %if.then.78.i, %if.end.75.i 170 %__b.3.i = phi float [ %73, %if.then.78.i ], [ %__b.0.i, %if.end.75.i ] 171 %74 = fcmp ugt float %33, 0x7FF0000000000000 172 br i1 %74, label %if.then.83.i, label %if.end.85.i 173 174if.then.83.i: ; preds = %if.end.80.i 175 %75 = bitcast float %__c.1.i to i32 176 %76 = and i32 %75, -2147483648 177 %77 = bitcast i32 %76 to float 178 br label %if.end.85.i 179 180if.end.85.i: ; preds = %if.then.83.i, %if.end.80.i 181 %__c.3.i = phi float [ %77, %if.then.83.i ], [ %__c.1.i, %if.end.80.i ] 182 %78 = fcmp ugt float %.pre6.i, 0x7FF0000000000000 183 br i1 %78, label %if.then.88.i, label %if.then.93.i 184 185if.then.88.i: ; preds = %if.end.85.i 186 %79 = bitcast float %__d.1.i to i32 187 %80 = and i32 %79, -2147483648 188 %81 = bitcast i32 %80 to float 189 br label %if.then.93.i 190 191if.then.93.i: ; preds = %if.then.88.i, %if.end.85.i, %if.end.56.i, %if.then.53.i, %if.end.50.i 192 %__d.4.ph.i = phi float [ %__d.1.i, %if.end.85.i ], [ %81, %if.then.88.i ], [ %__d.1.i, %if.end.56.i ], [ %45, %if.end.50.i ], [ %45, %if.then.53.i ] 193 %__c.4.ph.i = phi float [ %__c.3.i, %if.end.85.i ], [ %__c.3.i, %if.then.88.i ], [ %__c.1.i, %if.end.56.i ], [ %40, %if.end.50.i ], [ %40, %if.then.53.i ] 194 %__b.4.ph.i = phi float [ %__b.3.i, %if.end.85.i ], [ %__b.3.i, %if.then.88.i ], [ %__b.0.i, %if.end.56.i ], [ %__b.0.i, %if.end.50.i ], [ %55, %if.then.53.i ] 195 %__a.4.ph.i = phi float [ %__a.3.i, %if.end.85.i ], [ %__a.3.i, %if.then.88.i ], [ %__a.0.i, %if.end.56.i ], [ %__a.1.i, %if.end.50.i ], [ %__a.1.i, %if.then.53.i ] 196 %mul95.i = fmul float %__c.4.ph.i, %__a.4.ph.i 197 %mul96.i = fmul float %__d.4.ph.i, %__b.4.ph.i 198 %sub97.i = fsub float %mul95.i, %mul96.i 199 %mul98.i = fmul float %sub97.i, 0x7FF0000000000000 200 %82 = bitcast float %mul98.i to i32 201 %mul100.i = fmul float %__d.4.ph.i, %__a.4.ph.i 202 %mul101.i = fmul float %__c.4.ph.i, %__b.4.ph.i 203 %add102.i = fadd float %mul101.i, %mul100.i 204 %mul103.i = fmul float %add102.i, 0x7FF0000000000000 205 %83 = bitcast float %mul103.i to i32 206 br label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit 207 208_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit: ; preds = %if.then.93.i, %lor.lhs.false.67.i, %land.lhs.true.i, %entry 209 %84 = phi i32 [ %4, %land.lhs.true.i ], [ %4, %entry ], [ %82, %if.then.93.i ], [ %4, %lor.lhs.false.67.i ] 210 %85 = phi i32 [ %5, %land.lhs.true.i ], [ %5, %entry ], [ %83, %if.then.93.i ], [ %5, %lor.lhs.false.67.i ] 211 %arrayidx5 = getelementptr inbounds float, float* %f, i64 5 212 %86 = bitcast float* %arrayidx5 to i32* 213 store i32 %84, i32* %86, align 4 214 %arrayidx7 = getelementptr inbounds float, float* %f, i64 6 215 %87 = bitcast float* %arrayidx7 to i32* 216 store i32 %85, i32* %87, align 4 217 ret void 218} 219 220declare float @llvm.nvvm.fabs.f(float) 221 222!nvvm.annotations = !{!0} 223 224!0 = !{void (float*)* @PR24303, !"kernel", i32 1} 225