1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+tbm < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_bextri_u32(i32 %a) nounwind readnone { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_bextri_u32: 6*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 7*9880d681SAndroid Build Coastguard Worker ; CHECK: bextr $ 8*9880d681SAndroid Build Coastguard Worker %0 = lshr i32 %a, 4 9*9880d681SAndroid Build Coastguard Worker %1 = and i32 %0, 4095 10*9880d681SAndroid Build Coastguard Worker ret i32 %1 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_bextri_u32_m(i32* nocapture %a) nounwind readonly { 14*9880d681SAndroid Build Coastguard Workerentry: 15*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_bextri_u32_m: 16*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 17*9880d681SAndroid Build Coastguard Worker ; CHECK: bextr $ 18*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a 19*9880d681SAndroid Build Coastguard Worker %1 = lshr i32 %0, 4 20*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, 4095 21*9880d681SAndroid Build Coastguard Worker ret i32 %2 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_bextri_u64(i64 %a) nounwind readnone { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_bextri_u64: 27*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 28*9880d681SAndroid Build Coastguard Worker ; CHECK: bextr $ 29*9880d681SAndroid Build Coastguard Worker %0 = lshr i64 %a, 4 30*9880d681SAndroid Build Coastguard Worker %1 = and i64 %0, 4095 31*9880d681SAndroid Build Coastguard Worker ret i64 %1 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_bextri_u64_m(i64* nocapture %a) nounwind readonly { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_bextri_u64_m: 37*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 38*9880d681SAndroid Build Coastguard Worker ; CHECK: bextr $ 39*9880d681SAndroid Build Coastguard Worker %0 = load i64, i64* %a 40*9880d681SAndroid Build Coastguard Worker %1 = lshr i64 %0, 4 41*9880d681SAndroid Build Coastguard Worker %2 = and i64 %1, 4095 42*9880d681SAndroid Build Coastguard Worker ret i64 %2 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blcfill_u32(i32 %a) nounwind readnone { 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcfill_u32: 48*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 49*9880d681SAndroid Build Coastguard Worker ; CHECK: blcfill % 50*9880d681SAndroid Build Coastguard Worker %0 = add i32 %a, 1 51*9880d681SAndroid Build Coastguard Worker %1 = and i32 %0, %a 52*9880d681SAndroid Build Coastguard Worker ret i32 %1 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blcfill_u64(i64 %a) nounwind readnone { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcfill_u64: 58*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 59*9880d681SAndroid Build Coastguard Worker ; CHECK: blcfill % 60*9880d681SAndroid Build Coastguard Worker %0 = add i64 %a, 1 61*9880d681SAndroid Build Coastguard Worker %1 = and i64 %0, %a 62*9880d681SAndroid Build Coastguard Worker ret i64 %1 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blci_u32(i32 %a) nounwind readnone { 66*9880d681SAndroid Build Coastguard Workerentry: 67*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blci_u32: 68*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 69*9880d681SAndroid Build Coastguard Worker ; CHECK: blci % 70*9880d681SAndroid Build Coastguard Worker %0 = add i32 1, %a 71*9880d681SAndroid Build Coastguard Worker %1 = xor i32 %0, -1 72*9880d681SAndroid Build Coastguard Worker %2 = or i32 %1, %a 73*9880d681SAndroid Build Coastguard Worker ret i32 %2 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blci_u64(i64 %a) nounwind readnone { 77*9880d681SAndroid Build Coastguard Workerentry: 78*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blci_u64: 79*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 80*9880d681SAndroid Build Coastguard Worker ; CHECK: blci % 81*9880d681SAndroid Build Coastguard Worker %0 = add i64 1, %a 82*9880d681SAndroid Build Coastguard Worker %1 = xor i64 %0, -1 83*9880d681SAndroid Build Coastguard Worker %2 = or i64 %1, %a 84*9880d681SAndroid Build Coastguard Worker ret i64 %2 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blci_u32_b(i32 %a) nounwind readnone { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blci_u32_b: 90*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 91*9880d681SAndroid Build Coastguard Worker ; CHECK: blci % 92*9880d681SAndroid Build Coastguard Worker %0 = sub i32 -2, %a 93*9880d681SAndroid Build Coastguard Worker %1 = or i32 %0, %a 94*9880d681SAndroid Build Coastguard Worker ret i32 %1 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blci_u64_b(i64 %a) nounwind readnone { 98*9880d681SAndroid Build Coastguard Workerentry: 99*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blci_u64_b: 100*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 101*9880d681SAndroid Build Coastguard Worker ; CHECK: blci % 102*9880d681SAndroid Build Coastguard Worker %0 = sub i64 -2, %a 103*9880d681SAndroid Build Coastguard Worker %1 = or i64 %0, %a 104*9880d681SAndroid Build Coastguard Worker ret i64 %1 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blcic_u32(i32 %a) nounwind readnone { 108*9880d681SAndroid Build Coastguard Workerentry: 109*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcic_u32: 110*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 111*9880d681SAndroid Build Coastguard Worker ; CHECK: blcic % 112*9880d681SAndroid Build Coastguard Worker %0 = xor i32 %a, -1 113*9880d681SAndroid Build Coastguard Worker %1 = add i32 %a, 1 114*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, %0 115*9880d681SAndroid Build Coastguard Worker ret i32 %2 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blcic_u64(i64 %a) nounwind readnone { 119*9880d681SAndroid Build Coastguard Workerentry: 120*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcic_u64: 121*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 122*9880d681SAndroid Build Coastguard Worker ; CHECK: blcic % 123*9880d681SAndroid Build Coastguard Worker %0 = xor i64 %a, -1 124*9880d681SAndroid Build Coastguard Worker %1 = add i64 %a, 1 125*9880d681SAndroid Build Coastguard Worker %2 = and i64 %1, %0 126*9880d681SAndroid Build Coastguard Worker ret i64 %2 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blcmsk_u32(i32 %a) nounwind readnone { 130*9880d681SAndroid Build Coastguard Workerentry: 131*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcmsk_u32: 132*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 133*9880d681SAndroid Build Coastguard Worker ; CHECK: blcmsk % 134*9880d681SAndroid Build Coastguard Worker %0 = add i32 %a, 1 135*9880d681SAndroid Build Coastguard Worker %1 = xor i32 %0, %a 136*9880d681SAndroid Build Coastguard Worker ret i32 %1 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blcmsk_u64(i64 %a) nounwind readnone { 140*9880d681SAndroid Build Coastguard Workerentry: 141*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcmsk_u64: 142*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 143*9880d681SAndroid Build Coastguard Worker ; CHECK: blcmsk % 144*9880d681SAndroid Build Coastguard Worker %0 = add i64 %a, 1 145*9880d681SAndroid Build Coastguard Worker %1 = xor i64 %0, %a 146*9880d681SAndroid Build Coastguard Worker ret i64 %1 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blcs_u32(i32 %a) nounwind readnone { 150*9880d681SAndroid Build Coastguard Workerentry: 151*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcs_u32: 152*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 153*9880d681SAndroid Build Coastguard Worker ; CHECK: blcs % 154*9880d681SAndroid Build Coastguard Worker %0 = add i32 %a, 1 155*9880d681SAndroid Build Coastguard Worker %1 = or i32 %0, %a 156*9880d681SAndroid Build Coastguard Worker ret i32 %1 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blcs_u64(i64 %a) nounwind readnone { 160*9880d681SAndroid Build Coastguard Workerentry: 161*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blcs_u64: 162*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 163*9880d681SAndroid Build Coastguard Worker ; CHECK: blcs % 164*9880d681SAndroid Build Coastguard Worker %0 = add i64 %a, 1 165*9880d681SAndroid Build Coastguard Worker %1 = or i64 %0, %a 166*9880d681SAndroid Build Coastguard Worker ret i64 %1 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blsfill_u32(i32 %a) nounwind readnone { 170*9880d681SAndroid Build Coastguard Workerentry: 171*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blsfill_u32: 172*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 173*9880d681SAndroid Build Coastguard Worker ; CHECK: blsfill % 174*9880d681SAndroid Build Coastguard Worker %0 = add i32 %a, -1 175*9880d681SAndroid Build Coastguard Worker %1 = or i32 %0, %a 176*9880d681SAndroid Build Coastguard Worker ret i32 %1 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blsfill_u64(i64 %a) nounwind readnone { 180*9880d681SAndroid Build Coastguard Workerentry: 181*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blsfill_u64: 182*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 183*9880d681SAndroid Build Coastguard Worker ; CHECK: blsfill % 184*9880d681SAndroid Build Coastguard Worker %0 = add i64 %a, -1 185*9880d681SAndroid Build Coastguard Worker %1 = or i64 %0, %a 186*9880d681SAndroid Build Coastguard Worker ret i64 %1 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_blsic_u32(i32 %a) nounwind readnone { 190*9880d681SAndroid Build Coastguard Workerentry: 191*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blsic_u32: 192*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 193*9880d681SAndroid Build Coastguard Worker ; CHECK: blsic % 194*9880d681SAndroid Build Coastguard Worker %0 = xor i32 %a, -1 195*9880d681SAndroid Build Coastguard Worker %1 = add i32 %a, -1 196*9880d681SAndroid Build Coastguard Worker %2 = or i32 %0, %1 197*9880d681SAndroid Build Coastguard Worker ret i32 %2 198*9880d681SAndroid Build Coastguard Worker} 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_blsic_u64(i64 %a) nounwind readnone { 201*9880d681SAndroid Build Coastguard Workerentry: 202*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_blsic_u64: 203*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 204*9880d681SAndroid Build Coastguard Worker ; CHECK: blsic % 205*9880d681SAndroid Build Coastguard Worker %0 = xor i64 %a, -1 206*9880d681SAndroid Build Coastguard Worker %1 = add i64 %a, -1 207*9880d681SAndroid Build Coastguard Worker %2 = or i64 %0, %1 208*9880d681SAndroid Build Coastguard Worker ret i64 %2 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_t1mskc_u32(i32 %a) nounwind readnone { 212*9880d681SAndroid Build Coastguard Workerentry: 213*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_t1mskc_u32: 214*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 215*9880d681SAndroid Build Coastguard Worker ; CHECK: t1mskc % 216*9880d681SAndroid Build Coastguard Worker %0 = xor i32 %a, -1 217*9880d681SAndroid Build Coastguard Worker %1 = add i32 %a, 1 218*9880d681SAndroid Build Coastguard Worker %2 = or i32 %0, %1 219*9880d681SAndroid Build Coastguard Worker ret i32 %2 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine i64 @Ttest_x86_tbm_t1mskc_u64(i64 %a) nounwind readnone { 223*9880d681SAndroid Build Coastguard Workerentry: 224*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_t1mskc_u64: 225*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 226*9880d681SAndroid Build Coastguard Worker ; CHECK: t1mskc % 227*9880d681SAndroid Build Coastguard Worker %0 = xor i64 %a, -1 228*9880d681SAndroid Build Coastguard Worker %1 = add i64 %a, 1 229*9880d681SAndroid Build Coastguard Worker %2 = or i64 %0, %1 230*9880d681SAndroid Build Coastguard Worker ret i64 %2 231*9880d681SAndroid Build Coastguard Worker} 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_tbm_tzmsk_u32(i32 %a) nounwind readnone { 234*9880d681SAndroid Build Coastguard Workerentry: 235*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_tzmsk_u32: 236*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 237*9880d681SAndroid Build Coastguard Worker ; CHECK: tzmsk % 238*9880d681SAndroid Build Coastguard Worker %0 = xor i32 %a, -1 239*9880d681SAndroid Build Coastguard Worker %1 = add i32 %a, -1 240*9880d681SAndroid Build Coastguard Worker %2 = and i32 %0, %1 241*9880d681SAndroid Build Coastguard Worker ret i32 %2 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerdefine i64 @test_x86_tbm_tzmsk_u64(i64 %a) nounwind readnone { 245*9880d681SAndroid Build Coastguard Workerentry: 246*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_x86_tbm_tzmsk_u64: 247*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: mov 248*9880d681SAndroid Build Coastguard Worker ; CHECK: tzmsk % 249*9880d681SAndroid Build Coastguard Worker %0 = xor i64 %a, -1 250*9880d681SAndroid Build Coastguard Worker %1 = add i64 %a, -1 251*9880d681SAndroid Build Coastguard Worker %2 = and i64 %0, %1 252*9880d681SAndroid Build Coastguard Worker ret i64 %2 253*9880d681SAndroid Build Coastguard Worker} 254