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 Worker; 5*9880d681SAndroid Build Coastguard Worker; EXTRQ 6*9880d681SAndroid Build Coastguard Worker; 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_call(<2 x i64> %x, <16 x i8> %y) { 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_call( 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) #1 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 12*9880d681SAndroid Build Coastguard Worker; 13*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) nounwind 14*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_zero_arg0(<2 x i64> %x, <16 x i8> %y) { 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_zero_arg0( 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 0, i64 undef> 20*9880d681SAndroid Build Coastguard Worker; 21*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> zeroinitializer, <16 x i8> %y) nounwind 22*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_zero_arg1(<2 x i64> %x, <16 x i8> %y) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_zero_arg1( 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> %x 28*9880d681SAndroid Build Coastguard Worker; 29*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> zeroinitializer) nounwind 30*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_to_extqi(<2 x i64> %x, <16 x i8> %y) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_to_extqi( 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 8, i8 15) 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 37*9880d681SAndroid Build Coastguard Worker; 38*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> <i8 8, i8 15, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>) nounwind 39*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_constant(<2 x i64> %x, <16 x i8> %y) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_constant( 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 255, i64 undef> 45*9880d681SAndroid Build Coastguard Worker; 46*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> <i64 -1, i64 55>, <16 x i8> <i8 8, i8 15, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>) nounwind 47*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_constant_undef(<2 x i64> %x, <16 x i8> %y) { 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_constant_undef( 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 65535, i64 undef> 53*9880d681SAndroid Build Coastguard Worker; 54*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> <i64 -1, i64 undef>, <16 x i8> <i8 16, i8 15, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>) nounwind 55*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker; 59*9880d681SAndroid Build Coastguard Worker; EXTRQI 60*9880d681SAndroid Build Coastguard Worker; 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_call(<2 x i64> %x) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_call( 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 8, i8 23) 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 66*9880d681SAndroid Build Coastguard Worker; 67*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 8, i8 23) 68*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_shuffle_1zuu(<2 x i64> %x) { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_shuffle_1zuu( 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i64> %x to <16 x i8> 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <16 x i8> [[TMP1]], <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 0, i8 0, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64> 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP3]] 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 32, i8 32) 79*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_shuffle_2zzzzzzzuuuuuuuu(<2 x i64> %x) { 83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_shuffle_2zzzzzzzuuuuuuuu( 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i64> %x to <16 x i8> 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <16 x i8> [[TMP1]], <16 x i8> <i8 undef, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, <16 x i32> <i32 2, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64> 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP3]] 88*9880d681SAndroid Build Coastguard Worker; 89*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 8, i8 16) 90*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_undef(<2 x i64> %x) { 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_undef( 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 96*9880d681SAndroid Build Coastguard Worker; 97*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> zeroinitializer, i8 32, i8 33) 98*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_zero(<2 x i64> %x) { 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_zero( 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 0, i64 undef> 104*9880d681SAndroid Build Coastguard Worker; 105*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> zeroinitializer, i8 3, i8 18) 106*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_constant(<2 x i64> %x) { 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_constant( 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 7, i64 undef> 112*9880d681SAndroid Build Coastguard Worker; 113*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> <i64 -1, i64 55>, i8 3, i8 18) 114*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_constant_undef(<2 x i64> %x) { 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_constant_undef( 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 15, i64 undef> 120*9880d681SAndroid Build Coastguard Worker; 121*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> <i64 -1, i64 undef>, i8 4, i8 18) 122*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; 126*9880d681SAndroid Build Coastguard Worker; INSERTQ 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_call(<2 x i64> %x, <2 x i64> %y) { 130*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_call( 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %x, <2 x i64> %y) #1 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 133*9880d681SAndroid Build Coastguard Worker; 134*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %x, <2 x i64> %y) nounwind 135*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_to_insertqi(<2 x i64> %x, <2 x i64> %y) { 139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_to_insertqi( 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> <i64 8, i64 undef>, i8 18, i8 2) 141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 142*9880d681SAndroid Build Coastguard Worker; 143*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %x, <2 x i64> <i64 8, i64 658>) nounwind 144*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_constant(<2 x i64> %x, <2 x i64> %y) { 148*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_constant( 149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 32, i64 undef> 150*9880d681SAndroid Build Coastguard Worker; 151*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> <i64 0, i64 0>, <2 x i64> <i64 8, i64 658>) nounwind 152*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_constant_undef(<2 x i64> %x, <2 x i64> %y) { 156*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_constant_undef( 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 33, i64 undef> 158*9880d681SAndroid Build Coastguard Worker; 159*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> <i64 1, i64 undef>, <2 x i64> <i64 8, i64 658>) nounwind 160*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; 164*9880d681SAndroid Build Coastguard Worker; INSERTQI 165*9880d681SAndroid Build Coastguard Worker; 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_insertqi_shuffle_04uu(<16 x i8> %v, <16 x i8> %i) { 168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_shuffle_04uu( 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <16 x i8> %v, <16 x i8> %i, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 16, i32 17, i32 18, i32 19, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <16 x i8> [[TMP1]] 171*9880d681SAndroid Build Coastguard Worker; 172*9880d681SAndroid Build Coastguard Worker %1 = bitcast <16 x i8> %v to <2 x i64> 173*9880d681SAndroid Build Coastguard Worker %2 = bitcast <16 x i8> %i to <2 x i64> 174*9880d681SAndroid Build Coastguard Worker %3 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %1, <2 x i64> %2, i8 32, i8 32) 175*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i64> %3 to <16 x i8> 176*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %4 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_insertqi_shuffle_8123uuuu(<16 x i8> %v, <16 x i8> %i) { 180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_shuffle_8123uuuu( 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <16 x i8> %v, <16 x i8> %i, <16 x i32> <i32 16, i32 17, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <16 x i8> [[TMP1]] 183*9880d681SAndroid Build Coastguard Worker; 184*9880d681SAndroid Build Coastguard Worker %1 = bitcast <16 x i8> %v to <2 x i64> 185*9880d681SAndroid Build Coastguard Worker %2 = bitcast <16 x i8> %i to <2 x i64> 186*9880d681SAndroid Build Coastguard Worker %3 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %1, <2 x i64> %2, i8 16, i8 0) 187*9880d681SAndroid Build Coastguard Worker %4 = bitcast <2 x i64> %3 to <16 x i8> 188*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %4 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertqi_constant(<2 x i64> %v, <2 x i64> %i) { 192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_constant( 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 -131055, i64 undef> 194*9880d681SAndroid Build Coastguard Worker; 195*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> <i64 -1, i64 -1>, <2 x i64> <i64 8, i64 0>, i8 16, i8 1) 196*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker; The result of this insert is the second arg, since the top 64 bits of 200*9880d681SAndroid Build Coastguard Worker; the result are undefined, and we copy the bottom 64 bits from the 201*9880d681SAndroid Build Coastguard Worker; second arg 202*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testInsert64Bits(<2 x i64> %v, <2 x i64> %i) { 203*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @testInsert64Bits( 204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> %i 205*9880d681SAndroid Build Coastguard Worker; 206*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %v, <2 x i64> %i, i8 64, i8 0) 207*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testZeroLength(<2 x i64> %v, <2 x i64> %i) { 211*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @testZeroLength( 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> %i 213*9880d681SAndroid Build Coastguard Worker; 214*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %v, <2 x i64> %i, i8 0, i8 0) 215*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 216*9880d681SAndroid Build Coastguard Worker} 217*9880d681SAndroid Build Coastguard Worker 218*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testUndefinedInsertq_1(<2 x i64> %v, <2 x i64> %i) { 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @testUndefinedInsertq_1( 220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 221*9880d681SAndroid Build Coastguard Worker; 222*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %v, <2 x i64> %i, i8 0, i8 16) 223*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 224*9880d681SAndroid Build Coastguard Worker} 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testUndefinedInsertq_2(<2 x i64> %v, <2 x i64> %i) { 227*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @testUndefinedInsertq_2( 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 229*9880d681SAndroid Build Coastguard Worker; 230*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %v, <2 x i64> %i, i8 48, i8 32) 231*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @testUndefinedInsertq_3(<2 x i64> %v, <2 x i64> %i) { 235*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @testUndefinedInsertq_3( 236*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 237*9880d681SAndroid Build Coastguard Worker; 238*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %v, <2 x i64> %i, i8 64, i8 16) 239*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %1 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Worker; 243*9880d681SAndroid Build Coastguard Worker; Vector Demanded Bits 244*9880d681SAndroid Build Coastguard Worker; 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_arg0(<2 x i64> %x, <16 x i8> %y) { 247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_arg0( 248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) #1 249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 250*9880d681SAndroid Build Coastguard Worker; 251*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 252*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %1, <16 x i8> %y) nounwind 253*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_arg1(<2 x i64> %x, <16 x i8> %y) { 257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_arg1( 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) #1 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 260*9880d681SAndroid Build Coastguard Worker; 261*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %y, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 262*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %1) nounwind 263*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 264*9880d681SAndroid Build Coastguard Worker} 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_args01(<2 x i64> %x, <16 x i8> %y) { 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_args01( 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) #1 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 270*9880d681SAndroid Build Coastguard Worker; 271*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 272*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %y, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0> 273*9880d681SAndroid Build Coastguard Worker %3 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %1, <16 x i8> %2) nounwind 274*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrq_ret(<2 x i64> %x, <16 x i8> %y) { 278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrq_ret( 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 280*9880d681SAndroid Build Coastguard Worker; 281*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64> %x, <16 x i8> %y) nounwind 282*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 283*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_arg0(<2 x i64> %x) { 287*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_arg0( 288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 3, i8 2) 289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 290*9880d681SAndroid Build Coastguard Worker; 291*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 292*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %1, i8 3, i8 2) 293*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_extrqi_ret(<2 x i64> %x) { 297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_extrqi_ret( 298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 299*9880d681SAndroid Build Coastguard Worker; 300*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64> %x, i8 3, i8 2) nounwind 301*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 302*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_arg0(<2 x i64> %x, <2 x i64> %y) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_arg0( 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %x, <2 x i64> %y) #1 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 309*9880d681SAndroid Build Coastguard Worker; 310*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 311*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %1, <2 x i64> %y) nounwind 312*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 313*9880d681SAndroid Build Coastguard Worker} 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertq_ret(<2 x i64> %x, <2 x i64> %y) { 316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertq_ret( 317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 318*9880d681SAndroid Build Coastguard Worker; 319*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64> %x, <2 x i64> %y) nounwind 320*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 321*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 322*9880d681SAndroid Build Coastguard Worker} 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertqi_arg0(<2 x i64> %x, <2 x i64> %y) { 325*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_arg0( 326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> %y, i8 3, i8 2) #1 327*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 328*9880d681SAndroid Build Coastguard Worker; 329*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 330*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %1, <2 x i64> %y, i8 3, i8 2) nounwind 331*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 332*9880d681SAndroid Build Coastguard Worker} 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertqi_arg1(<2 x i64> %x, <2 x i64> %y) { 335*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_arg1( 336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> %y, i8 3, i8 2) #1 337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 338*9880d681SAndroid Build Coastguard Worker; 339*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %y, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 340*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> %1, i8 3, i8 2) nounwind 341*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 342*9880d681SAndroid Build Coastguard Worker} 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertqi_args01(<2 x i64> %x, <2 x i64> %y) { 345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_args01( 346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> %y, i8 3, i8 2) #1 347*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> [[TMP1]] 348*9880d681SAndroid Build Coastguard Worker; 349*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %x, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 350*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %y, <2 x i64> undef, <2 x i32> <i32 0, i32 0> 351*9880d681SAndroid Build Coastguard Worker %3 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %1, <2 x i64> %2, i8 3, i8 2) nounwind 352*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 353*9880d681SAndroid Build Coastguard Worker} 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_insertqi_ret(<2 x i64> %x, <2 x i64> %y) { 356*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test_insertqi_ret( 357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> undef 358*9880d681SAndroid Build Coastguard Worker; 359*9880d681SAndroid Build Coastguard Worker %1 = tail call <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64> %x, <2 x i64> %y, i8 3, i8 2) nounwind 360*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 361*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Worker; CHECK: declare <2 x i64> @llvm.x86.sse4a.extrq 365*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse4a.extrq(<2 x i64>, <16 x i8>) nounwind 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Worker; CHECK: declare <2 x i64> @llvm.x86.sse4a.extrqi 368*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse4a.extrqi(<2 x i64>, i8, i8) nounwind 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Worker; CHECK: declare <2 x i64> @llvm.x86.sse4a.insertq 371*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse4a.insertq(<2 x i64>, <2 x i64>) nounwind 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Worker; CHECK: declare <2 x i64> @llvm.x86.sse4a.insertqi 374*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.sse4a.insertqi(<2 x i64>, <2 x i64>, i8, i8) nounwind 375