1e5bdb7afSc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2e5bdb7afSc8ef; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3e5bdb7afSc8ef 4e5bdb7afSc8efdefine float @ldexp_zext_float(float %x, i1 %bool) { 5e5bdb7afSc8ef; CHECK-LABEL: @ldexp_zext_float( 6e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], float 2.000000e+00, float 1.000000e+00 7a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul float [[X:%.*]], [[TMP1]] 8e5bdb7afSc8ef; CHECK-NEXT: ret float [[LDEXP]] 9e5bdb7afSc8ef; 10e5bdb7afSc8ef %zext = zext i1 %bool to i32 11e5bdb7afSc8ef %ldexp = call float @llvm.ldexp.f32.i32(float %x, i32 %zext) 12e5bdb7afSc8ef ret float %ldexp 13e5bdb7afSc8ef} 14e5bdb7afSc8ef 15e5bdb7afSc8efdefine float @ldexp_zext_float_negative(float %x, i8 %y) { 16e5bdb7afSc8ef; CHECK-LABEL: @ldexp_zext_float_negative( 17e5bdb7afSc8ef; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[Y:%.*]] to i32 18e5bdb7afSc8ef; CHECK-NEXT: [[LDEXP:%.*]] = call float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[ZEXT]]) 19e5bdb7afSc8ef; CHECK-NEXT: ret float [[LDEXP]] 20e5bdb7afSc8ef; 21e5bdb7afSc8ef %zext = zext i8 %y to i32 22e5bdb7afSc8ef %ldexp = call float @llvm.ldexp.f32.i32(float %x, i32 %zext) 23e5bdb7afSc8ef ret float %ldexp 24e5bdb7afSc8ef} 25e5bdb7afSc8ef 26e5bdb7afSc8efdefine double @ldexp_zext_double(double %x, i1 %bool) { 27e5bdb7afSc8ef; CHECK-LABEL: @ldexp_zext_double( 28e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], double 2.000000e+00, double 1.000000e+00 29a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul double [[X:%.*]], [[TMP1]] 30e5bdb7afSc8ef; CHECK-NEXT: ret double [[LDEXP]] 31e5bdb7afSc8ef; 32e5bdb7afSc8ef %zext = zext i1 %bool to i32 33e5bdb7afSc8ef %ldexp = call double @llvm.ldexp.f64.i32(double %x, i32 %zext) 34e5bdb7afSc8ef ret double %ldexp 35e5bdb7afSc8ef} 36e5bdb7afSc8ef 37e5bdb7afSc8efdefine double @ldexp_zext_double_fast_math(double %x, i1 %bool) { 38e5bdb7afSc8ef; CHECK-LABEL: @ldexp_zext_double_fast_math( 39e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], double 2.000000e+00, double 1.000000e+00 40a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul reassoc double [[X:%.*]], [[TMP1]] 41e5bdb7afSc8ef; CHECK-NEXT: ret double [[LDEXP]] 42e5bdb7afSc8ef; 43e5bdb7afSc8ef %zext = zext i1 %bool to i32 44e5bdb7afSc8ef %ldexp = call reassoc double @llvm.ldexp.f64.i32(double %x, i32 %zext) 45e5bdb7afSc8ef ret double %ldexp 46e5bdb7afSc8ef} 47e5bdb7afSc8ef 48e5bdb7afSc8efdefine <2 x float> @ldexp_zext_float_vector(<2 x float> %x, <2 x i1> %bool) { 49e5bdb7afSc8ef; CHECK-LABEL: @ldexp_zext_float_vector( 50*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = select <2 x i1> [[BOOL:%.*]], <2 x float> splat (float 2.000000e+00), <2 x float> splat (float 1.000000e+00) 51a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul <2 x float> [[X:%.*]], [[TMP1]] 52e5bdb7afSc8ef; CHECK-NEXT: ret <2 x float> [[LDEXP]] 53e5bdb7afSc8ef; 54e5bdb7afSc8ef %zext = zext <2 x i1> %bool to <2 x i32> 55e5bdb7afSc8ef %ldexp = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %zext) 56e5bdb7afSc8ef ret <2 x float> %ldexp 57e5bdb7afSc8ef} 58e5bdb7afSc8ef 59e5bdb7afSc8efdefine float @ldexp_sext_float(float %x, i1 %bool) { 60e5bdb7afSc8ef; CHECK-LABEL: @ldexp_sext_float( 61e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], float 5.000000e-01, float 1.000000e+00 62a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul float [[X:%.*]], [[TMP1]] 63e5bdb7afSc8ef; CHECK-NEXT: ret float [[LDEXP]] 64e5bdb7afSc8ef; 65e5bdb7afSc8ef %sext = sext i1 %bool to i32 66e5bdb7afSc8ef %ldexp = call float @llvm.ldexp.f32.i32(float %x, i32 %sext) 67e5bdb7afSc8ef ret float %ldexp 68e5bdb7afSc8ef} 69e5bdb7afSc8ef 70e5bdb7afSc8efdefine float @ldexp_sext_float_negative(float %x, i8 %y) { 71e5bdb7afSc8ef; CHECK-LABEL: @ldexp_sext_float_negative( 72e5bdb7afSc8ef; CHECK-NEXT: [[SEXT:%.*]] = sext i8 [[Y:%.*]] to i32 73e5bdb7afSc8ef; CHECK-NEXT: [[LDEXP:%.*]] = call float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[SEXT]]) 74e5bdb7afSc8ef; CHECK-NEXT: ret float [[LDEXP]] 75e5bdb7afSc8ef; 76e5bdb7afSc8ef %sext = sext i8 %y to i32 77e5bdb7afSc8ef %ldexp = call float @llvm.ldexp.f32.i32(float %x, i32 %sext) 78e5bdb7afSc8ef ret float %ldexp 79e5bdb7afSc8ef} 80e5bdb7afSc8ef 81e5bdb7afSc8efdefine double @ldexp_sext_double(double %x, i1 %bool) { 82e5bdb7afSc8ef; CHECK-LABEL: @ldexp_sext_double( 83e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], double 5.000000e-01, double 1.000000e+00 84a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul double [[X:%.*]], [[TMP1]] 85e5bdb7afSc8ef; CHECK-NEXT: ret double [[LDEXP]] 86e5bdb7afSc8ef; 87e5bdb7afSc8ef %sext = sext i1 %bool to i32 88e5bdb7afSc8ef %ldexp = call double @llvm.ldexp.f64.i32(double %x, i32 %sext) 89e5bdb7afSc8ef ret double %ldexp 90e5bdb7afSc8ef} 91e5bdb7afSc8ef 92e5bdb7afSc8efdefine double @ldexp_sext_double_fast_math(double %x, i1 %bool) { 93e5bdb7afSc8ef; CHECK-LABEL: @ldexp_sext_double_fast_math( 94e5bdb7afSc8ef; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[BOOL:%.*]], double 5.000000e-01, double 1.000000e+00 95a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul reassoc double [[X:%.*]], [[TMP1]] 96e5bdb7afSc8ef; CHECK-NEXT: ret double [[LDEXP]] 97e5bdb7afSc8ef; 98e5bdb7afSc8ef %sext = sext i1 %bool to i32 99e5bdb7afSc8ef %ldexp = call reassoc double @llvm.ldexp.f64.i32(double %x, i32 %sext) 100e5bdb7afSc8ef ret double %ldexp 101e5bdb7afSc8ef} 102e5bdb7afSc8ef 103e5bdb7afSc8efdefine <2 x float> @ldexp_sext_float_vector(<2 x float> %x, <2 x i1> %bool) { 104e5bdb7afSc8ef; CHECK-LABEL: @ldexp_sext_float_vector( 105*38fffa63SPaul Walker; CHECK-NEXT: [[TMP1:%.*]] = select <2 x i1> [[BOOL:%.*]], <2 x float> splat (float 5.000000e-01), <2 x float> splat (float 1.000000e+00) 106a1058776SNikita Popov; CHECK-NEXT: [[LDEXP:%.*]] = fmul <2 x float> [[X:%.*]], [[TMP1]] 107e5bdb7afSc8ef; CHECK-NEXT: ret <2 x float> [[LDEXP]] 108e5bdb7afSc8ef; 109e5bdb7afSc8ef %sext = sext <2 x i1> %bool to <2 x i32> 110e5bdb7afSc8ef %ldexp = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %sext) 111e5bdb7afSc8ef ret <2 x float> %ldexp 112e5bdb7afSc8ef} 113