1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; 7*9880d681SAndroid Build Coastguard Worker; DemandedBits - MOVMSK zeros the upper bits of the result. 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_mmx_pmovmskb(x86_mmx %a0) { 11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_mmx_pmovmskb( 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %a0) 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 14*9880d681SAndroid Build Coastguard Worker; 15*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %a0) 16*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 255 17*9880d681SAndroid Build Coastguard Worker ret i32 %2 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_sse_movmsk_ps(<4 x float> %a0) { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_sse_movmsk_ps( 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 24*9880d681SAndroid Build Coastguard Worker; 25*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) 26*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 15 27*9880d681SAndroid Build Coastguard Worker ret i32 %2 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_sse2_movmsk_pd(<2 x double> %a0) { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_sse2_movmsk_pd( 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %a0) 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 34*9880d681SAndroid Build Coastguard Worker; 35*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %a0) 36*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 3 37*9880d681SAndroid Build Coastguard Worker ret i32 %2 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_sse2_pmovmskb_128(<16 x i8> %a0) { 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_sse2_pmovmskb_128( 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0) 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 44*9880d681SAndroid Build Coastguard Worker; 45*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0) 46*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 65535 47*9880d681SAndroid Build Coastguard Worker ret i32 %2 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_avx_movmsk_ps_256(<8 x float> %a0) { 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_avx_movmsk_ps_256( 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 54*9880d681SAndroid Build Coastguard Worker; 55*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) 56*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 255 57*9880d681SAndroid Build Coastguard Worker ret i32 %2 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i32 @test_upper_x86_avx_movmsk_pd_256(<4 x double> %a0) { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_upper_x86_avx_movmsk_pd_256( 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 64*9880d681SAndroid Build Coastguard Worker; 65*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) 66*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 15 67*9880d681SAndroid Build Coastguard Worker ret i32 %2 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; llvm.x86.avx2.pmovmskb uses the whole of the 32-bit register. 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; 73*9880d681SAndroid Build Coastguard Worker; DemandedBits - If we don't use the lower bits then we just return zero. 74*9880d681SAndroid Build Coastguard Worker; 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_mmx_pmovmskb(x86_mmx %a0) { 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_mmx_pmovmskb( 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 79*9880d681SAndroid Build Coastguard Worker; 80*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %a0) 81*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -256 82*9880d681SAndroid Build Coastguard Worker ret i32 %2 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_sse_movmsk_ps(<4 x float> %a0) { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_sse_movmsk_ps( 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 88*9880d681SAndroid Build Coastguard Worker; 89*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) 90*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -16 91*9880d681SAndroid Build Coastguard Worker ret i32 %2 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_sse2_movmsk_pd(<2 x double> %a0) { 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_sse2_movmsk_pd( 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 97*9880d681SAndroid Build Coastguard Worker; 98*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %a0) 99*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -4 100*9880d681SAndroid Build Coastguard Worker ret i32 %2 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_sse2_pmovmskb_128(<16 x i8> %a0) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_sse2_pmovmskb_128( 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 106*9880d681SAndroid Build Coastguard Worker; 107*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0) 108*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -65536 109*9880d681SAndroid Build Coastguard Worker ret i32 %2 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_avx_movmsk_ps_256(<8 x float> %a0) { 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_avx_movmsk_ps_256( 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 115*9880d681SAndroid Build Coastguard Worker; 116*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> %a0) 117*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -256 118*9880d681SAndroid Build Coastguard Worker ret i32 %2 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lower_x86_avx_movmsk_pd_256(<4 x double> %a0) { 122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_lower_x86_avx_movmsk_pd_256( 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 124*9880d681SAndroid Build Coastguard Worker; 125*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> %a0) 126*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, -16 127*9880d681SAndroid Build Coastguard Worker ret i32 %2 128*9880d681SAndroid Build Coastguard Worker} 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker; llvm.x86.avx2.pmovmskb uses the whole of the 32-bit register. 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker; 133*9880d681SAndroid Build Coastguard Worker; Constant Folding (UNDEF -> ZERO) 134*9880d681SAndroid Build Coastguard Worker; 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_mmx_pmovmskb() { 137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_mmx_pmovmskb( 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 139*9880d681SAndroid Build Coastguard Worker; 140*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx undef) 141*9880d681SAndroid Build Coastguard Worker ret i32 %1 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_sse_movmsk_ps() { 145*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_sse_movmsk_ps( 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 147*9880d681SAndroid Build Coastguard Worker; 148*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> undef) 149*9880d681SAndroid Build Coastguard Worker ret i32 %1 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_sse2_movmsk_pd() { 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_sse2_movmsk_pd( 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 155*9880d681SAndroid Build Coastguard Worker; 156*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> undef) 157*9880d681SAndroid Build Coastguard Worker ret i32 %1 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_sse2_pmovmskb_128() { 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_sse2_pmovmskb_128( 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 163*9880d681SAndroid Build Coastguard Worker; 164*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> undef) 165*9880d681SAndroid Build Coastguard Worker ret i32 %1 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_avx_movmsk_ps_256() { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_avx_movmsk_ps_256( 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 171*9880d681SAndroid Build Coastguard Worker; 172*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> undef) 173*9880d681SAndroid Build Coastguard Worker ret i32 %1 174*9880d681SAndroid Build Coastguard Worker} 175*9880d681SAndroid Build Coastguard Worker 176*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_avx_movmsk_pd_256() { 177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_avx_movmsk_pd_256( 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 179*9880d681SAndroid Build Coastguard Worker; 180*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> undef) 181*9880d681SAndroid Build Coastguard Worker ret i32 %1 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine i32 @undef_x86_avx2_pmovmskb() { 185*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @undef_x86_avx2_pmovmskb( 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 187*9880d681SAndroid Build Coastguard Worker; 188*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx2.pmovmskb(<32 x i8> undef) 189*9880d681SAndroid Build Coastguard Worker ret i32 %1 190*9880d681SAndroid Build Coastguard Worker} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker; 193*9880d681SAndroid Build Coastguard Worker; Constant Folding (ZERO -> ZERO) 194*9880d681SAndroid Build Coastguard Worker; 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_mmx_pmovmskb() { 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_mmx_pmovmskb( 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx bitcast (<1 x i64> zeroinitializer to x86_mmx)) 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 200*9880d681SAndroid Build Coastguard Worker; 201*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x i64> zeroinitializer to x86_mmx 202*9880d681SAndroid Build Coastguard Worker %2 = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %1) 203*9880d681SAndroid Build Coastguard Worker ret i32 %2 204*9880d681SAndroid Build Coastguard Worker} 205*9880d681SAndroid Build Coastguard Worker 206*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_sse_movmsk_ps() { 207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_sse_movmsk_ps( 208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 209*9880d681SAndroid Build Coastguard Worker; 210*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> zeroinitializer) 211*9880d681SAndroid Build Coastguard Worker ret i32 %1 212*9880d681SAndroid Build Coastguard Worker} 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_sse2_movmsk_pd() { 215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_sse2_movmsk_pd( 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 217*9880d681SAndroid Build Coastguard Worker; 218*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> zeroinitializer) 219*9880d681SAndroid Build Coastguard Worker ret i32 %1 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_sse2_pmovmskb_128() { 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_sse2_pmovmskb_128( 224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 225*9880d681SAndroid Build Coastguard Worker; 226*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> zeroinitializer) 227*9880d681SAndroid Build Coastguard Worker ret i32 %1 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_avx_movmsk_ps_256() { 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_avx_movmsk_ps_256( 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 233*9880d681SAndroid Build Coastguard Worker; 234*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> zeroinitializer) 235*9880d681SAndroid Build Coastguard Worker ret i32 %1 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_avx_movmsk_pd_256() { 239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_avx_movmsk_pd_256( 240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 241*9880d681SAndroid Build Coastguard Worker; 242*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> zeroinitializer) 243*9880d681SAndroid Build Coastguard Worker ret i32 %1 244*9880d681SAndroid Build Coastguard Worker} 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Workerdefine i32 @zero_x86_avx2_pmovmskb() { 247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @zero_x86_avx2_pmovmskb( 248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 249*9880d681SAndroid Build Coastguard Worker; 250*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx2.pmovmskb(<32 x i8> zeroinitializer) 251*9880d681SAndroid Build Coastguard Worker ret i32 %1 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker; 255*9880d681SAndroid Build Coastguard Worker; Constant Folding 256*9880d681SAndroid Build Coastguard Worker; 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_mmx_pmovmskb() { 259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_mmx_pmovmskb( 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx bitcast (<8 x i8> <i8 0, i8 -1, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 0> to x86_mmx)) 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[TMP1]] 262*9880d681SAndroid Build Coastguard Worker; 263*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> <i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256> to x86_mmx 264*9880d681SAndroid Build Coastguard Worker %2 = call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %1) 265*9880d681SAndroid Build Coastguard Worker ret i32 %2 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_sse_movmsk_ps() { 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_sse_movmsk_ps( 270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 10 271*9880d681SAndroid Build Coastguard Worker; 272*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> <float 1.0, float -1.0, float 100.0, float -200.0>) 273*9880d681SAndroid Build Coastguard Worker ret i32 %1 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_sse2_movmsk_pd() { 277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_sse2_movmsk_pd( 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 2 279*9880d681SAndroid Build Coastguard Worker; 280*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> <double 1.0, double -1.0>) 281*9880d681SAndroid Build Coastguard Worker ret i32 %1 282*9880d681SAndroid Build Coastguard Worker} 283*9880d681SAndroid Build Coastguard Worker 284*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_sse2_pmovmskb_128() { 285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_sse2_pmovmskb_128( 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 5654 287*9880d681SAndroid Build Coastguard Worker; 288*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> <i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256, i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256>) 289*9880d681SAndroid Build Coastguard Worker ret i32 %1 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_avx_movmsk_ps_256() { 293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_avx_movmsk_ps_256( 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 170 295*9880d681SAndroid Build Coastguard Worker; 296*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.ps.256(<8 x float> <float 1.0, float -1.0, float 100.0, float -200.0, float +0.0, float -0.0, float 100000.0, float -5000000.0>) 297*9880d681SAndroid Build Coastguard Worker ret i32 %1 298*9880d681SAndroid Build Coastguard Worker} 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_avx_movmsk_pd_256() { 301*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_avx_movmsk_pd_256( 302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 10 303*9880d681SAndroid Build Coastguard Worker; 304*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx.movmsk.pd.256(<4 x double> <double 1.0, double -1.0, double 100.0, double -200.0>) 305*9880d681SAndroid Build Coastguard Worker ret i32 %1 306*9880d681SAndroid Build Coastguard Worker} 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Workerdefine i32 @fold_x86_avx2_pmovmskb() { 309*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @fold_x86_avx2_pmovmskb( 310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 370546176 311*9880d681SAndroid Build Coastguard Worker; 312*9880d681SAndroid Build Coastguard Worker %1 = call i32 @llvm.x86.avx2.pmovmskb(<32 x i8> <i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256, i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256, i8 0, i8 255, i8 -1, i8 127, i8 -127, i8 63, i8 64, i8 256>) 313*9880d681SAndroid Build Coastguard Worker ret i32 %1 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.mmx.pmovmskb(x86_mmx) 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) 319*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse2.movmsk.pd(<2 x double>) 320*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>) 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx.movmsk.ps.256(<8 x float>) 323*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx.movmsk.pd.256(<4 x double>) 324*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx2.pmovmskb(<32 x i8>) 325