184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=instcombine < %s | FileCheck %s3 4@gv = constant i32 05 6define float @cvt_var(i32 %a) {7; CHECK-LABEL: define float @cvt_var(8; CHECK-SAME: i32 [[A:%.*]]) {9; CHECK-NEXT: [[RET:%.*]] = call float @llvm.amdgcn.cvt.off.f32.i4(i32 [[A]])10; CHECK-NEXT: ret float [[RET]]11;12 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 %a)13 ret float %ret14}15 16define float @cvt_imm_0() {17; CHECK-LABEL: define float @cvt_imm_0() {18; CHECK-NEXT: ret float 0.000000e+0019;20 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 0)21 ret float %ret22}23 24define float @cvt_imm_1() {25; CHECK-LABEL: define float @cvt_imm_1() {26; CHECK-NEXT: ret float 6.250000e-0227;28 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 1)29 ret float %ret30}31 32define float @cvt_imm_2() {33; CHECK-LABEL: define float @cvt_imm_2() {34; CHECK-NEXT: ret float 1.250000e-0135;36 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 2)37 ret float %ret38}39 40define float @cvt_imm_3() {41; CHECK-LABEL: define float @cvt_imm_3() {42; CHECK-NEXT: ret float 1.875000e-0143;44 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 3)45 ret float %ret46}47 48define float @cvt_imm_4() {49; CHECK-LABEL: define float @cvt_imm_4() {50; CHECK-NEXT: ret float 2.500000e-0151;52 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 4)53 ret float %ret54}55 56define float @cvt_imm_5() {57; CHECK-LABEL: define float @cvt_imm_5() {58; CHECK-NEXT: ret float 3.125000e-0159;60 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 5)61 ret float %ret62}63 64define float @cvt_imm_6() {65; CHECK-LABEL: define float @cvt_imm_6() {66; CHECK-NEXT: ret float 3.750000e-0167;68 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 6)69 ret float %ret70}71 72define float @cvt_imm_7() {73; CHECK-LABEL: define float @cvt_imm_7() {74; CHECK-NEXT: ret float 4.375000e-0175;76 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 7)77 ret float %ret78}79 80define float @cvt_imm_8() {81; CHECK-LABEL: define float @cvt_imm_8() {82; CHECK-NEXT: ret float -5.000000e-0183;84 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 8)85 ret float %ret86}87 88define float @cvt_imm_9() {89; CHECK-LABEL: define float @cvt_imm_9() {90; CHECK-NEXT: ret float -4.375000e-0191;92 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 9)93 ret float %ret94}95 96define float @cvt_imm_10() {97; CHECK-LABEL: define float @cvt_imm_10() {98; CHECK-NEXT: ret float -3.750000e-0199;100 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 10)101 ret float %ret102}103 104define float @cvt_imm_11() {105; CHECK-LABEL: define float @cvt_imm_11() {106; CHECK-NEXT: ret float -3.125000e-01107;108 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 11)109 ret float %ret110}111 112define float @cvt_imm_12() {113; CHECK-LABEL: define float @cvt_imm_12() {114; CHECK-NEXT: ret float -2.500000e-01115;116 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 12)117 ret float %ret118}119 120define float @cvt_imm_13() {121; CHECK-LABEL: define float @cvt_imm_13() {122; CHECK-NEXT: ret float -1.875000e-01123;124 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 13)125 ret float %ret126}127 128define float @cvt_imm_14() {129; CHECK-LABEL: define float @cvt_imm_14() {130; CHECK-NEXT: ret float -1.250000e-01131;132 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 14)133 ret float %ret134}135 136define float @cvt_imm_15() {137; CHECK-LABEL: define float @cvt_imm_15() {138; CHECK-NEXT: ret float -6.250000e-02139;140 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 15)141 ret float %ret142}143 144define float @cvt_imm_underflow() {145; CHECK-LABEL: define float @cvt_imm_underflow() {146; CHECK-NEXT: ret float -6.250000e-02147;148 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 -1)149 ret float %ret150}151 152define float @cvt_imm_overflow() {153; CHECK-LABEL: define float @cvt_imm_overflow() {154; CHECK-NEXT: ret float 0.000000e+00155;156 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 16)157 ret float %ret158}159 160define float @cvt_poison() {161; CHECK-LABEL: define float @cvt_poison() {162; CHECK-NEXT: ret float poison163;164 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 poison)165 ret float %ret166}167 168define float @cvt_undef() {169; CHECK-LABEL: define float @cvt_undef() {170; CHECK-NEXT: ret float 0.000000e+00171;172 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 undef)173 ret float %ret174}175 176define float @cvt_constexpr() {177; CHECK-LABEL: define float @cvt_constexpr() {178; CHECK-NEXT: [[RET:%.*]] = call float @llvm.amdgcn.cvt.off.f32.i4(i32 ptrtoint (ptr @gv to i32))179; CHECK-NEXT: ret float [[RET]]180;181 %ret = call float @llvm.amdgcn.cvt.off.f32.i4(i32 ptrtoint (ptr @gv to i32))182 ret float %ret183}184