204 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i32 @ilogbf_const1() {5; CHECK-LABEL: define i32 @ilogbf_const1() {6; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 7.000000e+00)7; CHECK-NEXT: ret i32 28;9 %r = call i32 @ilogbf(float 7.000000e+00)10 ret i32 %r11}12 13define i32 @ilogb_const1() {14; CHECK-LABEL: define i32 @ilogb_const1() {15; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -7.000000e+00)16; CHECK-NEXT: ret i32 217;18 %r = call i32 @ilogb(double -7.000000e+00)19 ret i32 %r20}21 22define i32 @ilogbf_const2() {23; CHECK-LABEL: define i32 @ilogbf_const2() {24; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 5.000000e-01)25; CHECK-NEXT: ret i32 -126;27 %r = call i32 @ilogbf(float 5.000000e-01)28 ret i32 %r29}30 31define i32 @ilogb_const2() {32; CHECK-LABEL: define i32 @ilogb_const2() {33; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -5.000000e-01)34; CHECK-NEXT: ret i32 -135;36 %r = call i32 @ilogb(double -5.000000e-01)37 ret i32 %r38}39 40define i32 @ilogbf_zero() {41; CHECK-LABEL: define i32 @ilogbf_zero() {42; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00)43; CHECK-NEXT: ret i32 [[R]]44;45 %r = call i32 @ilogbf(float 0.000000e+00)46 ret i32 %r47}48 49define i32 @ilogb_zero() {50; CHECK-LABEL: define i32 @ilogb_zero() {51; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0.000000e+00)52; CHECK-NEXT: ret i32 [[R]]53;54 %r = call i32 @ilogb(double 0.000000e+00)55 ret i32 %r56}57 58define i32 @ilogbf_neg_zero() {59; CHECK-LABEL: define i32 @ilogbf_neg_zero() {60; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00)61; CHECK-NEXT: ret i32 [[R]]62;63 %r = call i32 @ilogbf(float -0.000000e+00)64 ret i32 %r65}66 67define i32 @ilogb_neg_zero() {68; CHECK-LABEL: define i32 @ilogb_neg_zero() {69; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -0.000000e+00)70; CHECK-NEXT: ret i32 [[R]]71;72 %r = call i32 @ilogb(double -0.000000e+00)73 ret i32 %r74}75 76define i32 @ilogbf_inf() {77; CHECK-LABEL: define i32 @ilogbf_inf() {78; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000)79; CHECK-NEXT: ret i32 [[R]]80;81 %r = call i32 @ilogbf(float 0x7FF0000000000000)82 ret i32 %r83}84 85define i32 @ilogb_inf() {86; CHECK-LABEL: define i32 @ilogb_inf() {87; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000)88; CHECK-NEXT: ret i32 [[R]]89;90 %r = call i32 @ilogb(double 0x7FF0000000000000)91 ret i32 %r92}93 94define i32 @ilogbf_nan() {95; CHECK-LABEL: define i32 @ilogbf_nan() {96; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000)97; CHECK-NEXT: ret i32 [[R]]98;99 %r = call i32 @ilogbf(float 0x7FF8000000000000)100 ret i32 %r101}102 103define i32 @ilogb_nan() {104; CHECK-LABEL: define i32 @ilogb_nan() {105; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000)106; CHECK-NEXT: ret i32 [[R]]107;108 %r = call i32 @ilogb(double 0x7FF8000000000000)109 ret i32 %r110}111 112define i32 @ilogbf_zero_readnone() {113; CHECK-LABEL: define i32 @ilogbf_zero_readnone() {114; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00) #[[ATTR0:[0-9]+]]115; CHECK-NEXT: ret i32 [[R]]116;117 %r = call i32 @ilogbf(float 0.000000e+00) readnone118 ret i32 %r119}120 121define i32 @ilogb_zero_readnone() {122; CHECK-LABEL: define i32 @ilogb_zero_readnone() {123; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0.000000e+00) #[[ATTR0]]124; CHECK-NEXT: ret i32 [[R]]125;126 %r = call i32 @ilogb(double 0.000000e+00) readnone127 ret i32 %r128}129 130define i32 @ilogbf_neg_zero_readnone() {131; CHECK-LABEL: define i32 @ilogbf_neg_zero_readnone() {132; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00) #[[ATTR0]]133; CHECK-NEXT: ret i32 [[R]]134;135 %r = call i32 @ilogbf(float -0.000000e+00) readnone136 ret i32 %r137}138 139define i32 @ilogb_neg_zero_readnone() {140; CHECK-LABEL: define i32 @ilogb_neg_zero_readnone() {141; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -0.000000e+00) #[[ATTR0]]142; CHECK-NEXT: ret i32 [[R]]143;144 %r = call i32 @ilogb(double -0.000000e+00) readnone145 ret i32 %r146}147 148define i32 @ilogbf_inf_readnone() {149; CHECK-LABEL: define i32 @ilogbf_inf_readnone() {150; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000) #[[ATTR0]]151; CHECK-NEXT: ret i32 [[R]]152;153 %r = call i32 @ilogbf(float 0x7FF0000000000000) readnone154 ret i32 %r155}156 157define i32 @ilogb_inf_readnone() {158; CHECK-LABEL: define i32 @ilogb_inf_readnone() {159; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000) #[[ATTR0]]160; CHECK-NEXT: ret i32 [[R]]161;162 %r = call i32 @ilogb(double 0x7FF0000000000000) readnone163 ret i32 %r164}165 166define i32 @ilogbf_nan_readnone() {167; CHECK-LABEL: define i32 @ilogbf_nan_readnone() {168; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000) #[[ATTR0]]169; CHECK-NEXT: ret i32 [[R]]170;171 %r = call i32 @ilogbf(float 0x7FF8000000000000) readnone172 ret i32 %r173}174 175define i32 @ilogb_nan_readnone() {176; CHECK-LABEL: define i32 @ilogb_nan_readnone() {177; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000) #[[ATTR0]]178; CHECK-NEXT: ret i32 [[R]]179;180 %r = call i32 @ilogb(double 0x7FF8000000000000) readnone181 ret i32 %r182}183 184define i32 @ilogbf_poison() {185; CHECK-LABEL: define i32 @ilogbf_poison() {186; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float poison)187; CHECK-NEXT: ret i32 [[R]]188;189 %r = call i32 @ilogbf(float poison)190 ret i32 %r191}192 193define i32 @ilogb_poison() {194; CHECK-LABEL: define i32 @ilogb_poison() {195; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double poison)196; CHECK-NEXT: ret i32 [[R]]197;198 %r = call i32 @ilogb(double poison)199 ret i32 %r200}201 202declare i32 @ilogbf(float)203declare i32 @ilogb(double)204