1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx,+xop < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @commute_fold_vpcomb(<16 x i8>* %a0, <16 x i8> %a1) { 4*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomb 5*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomgtb (%rdi), %xmm0, %xmm0 6*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a0 7*9880d681SAndroid Build Coastguard Worker %2 = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %1, <16 x i8> %a1, i8 0) ; vpcomltb 8*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpcomd(<4 x i32>* %a0, <4 x i32> %a1) { 13*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomd 14*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomged (%rdi), %xmm0, %xmm0 15*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 16*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %1, <4 x i32> %a1, i8 1) ; vpcomled 17*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpcomq(<2 x i64>* %a0, <2 x i64> %a1) { 22*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomq 23*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomltq (%rdi), %xmm0, %xmm0 24*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a0 25*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %1, <2 x i64> %a1, i8 2) ; vpcomgtq 26*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @commute_fold_vpcomub(<16 x i8>* %a0, <16 x i8> %a1) { 31*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomub 32*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomleub (%rdi), %xmm0, %xmm0 33*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a0 34*9880d681SAndroid Build Coastguard Worker %2 = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %1, <16 x i8> %a1, i8 3) ; vpcomgeub 35*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpcomud(<4 x i32>* %a0, <4 x i32> %a1) { 40*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomud 41*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomequd (%rdi), %xmm0, %xmm0 42*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 43*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %1, <4 x i32> %a1, i8 4) ; vpcomequd 44*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpcomuq(<2 x i64>* %a0, <2 x i64> %a1) { 49*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomuq 50*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomnequq (%rdi), %xmm0, %xmm0 51*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a0 52*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %1, <2 x i64> %a1, i8 5) ; vpcomnequq 53*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpcomuw(<8 x i16>* %a0, <8 x i16> %a1) { 58*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomuw 59*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomfalseuw (%rdi), %xmm0, %xmm0 60*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 61*9880d681SAndroid Build Coastguard Worker %2 = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %1, <8 x i16> %a1, i8 6) ; vpcomfalseuw 62*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpcomw(<8 x i16>* %a0, <8 x i16> %a1) { 67*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpcomw 68*9880d681SAndroid Build Coastguard Worker ;CHECK: vpcomtruew (%rdi), %xmm0, %xmm0 69*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 70*9880d681SAndroid Build Coastguard Worker %2 = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %1, <8 x i16> %a1, i8 7) ; vpcomtruew 71*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacsdd(<4 x i32>* %a0, <4 x i32> %a1, <4 x i32> %a2) { 76*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacsdd 77*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacsdd %xmm1, (%rdi), %xmm0, %xmm0 78*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 79*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32> %1, <4 x i32> %a1, <4 x i32> %a2) 80*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacsdqh(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) { 85*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacsdqh 86*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacsdqh %xmm1, (%rdi), %xmm0, %xmm0 87*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 88*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2) 89*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacsdql(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) { 94*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacsdql 95*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacsdql %xmm1, (%rdi), %xmm0, %xmm0 96*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 97*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2) 98*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacsdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacssdd(<4 x i32>* %a0, <4 x i32> %a1, <4 x i32> %a2) { 103*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacssdd 104*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacssdd %xmm1, (%rdi), %xmm0, %xmm0 105*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 106*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32> %1, <4 x i32> %a1, <4 x i32> %a2) 107*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacssdd(<4 x i32>, <4 x i32>, <4 x i32>) nounwind readnone 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacssdqh(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) { 112*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacssdqh 113*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacssdqh %xmm1, (%rdi), %xmm0, %xmm0 114*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 115*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2) 116*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdqh(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_fold_vpmacssdql(<4 x i32>* %a0, <4 x i32> %a1, <2 x i64> %a2) { 121*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacssdql 122*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacssdql %xmm1, (%rdi), %xmm0, %xmm0 123*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a0 124*9880d681SAndroid Build Coastguard Worker %2 = call <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32> %1, <4 x i32> %a1, <2 x i64> %a2) 125*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %2 126*9880d681SAndroid Build Coastguard Worker} 127*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.xop.vpmacssdql(<4 x i32>, <4 x i32>, <2 x i64>) nounwind readnone 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacsswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) { 130*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacsswd 131*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacsswd %xmm1, (%rdi), %xmm0, %xmm0 132*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 133*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2) 134*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpmacssww(<8 x i16>* %a0, <8 x i16> %a1, <8 x i16> %a2) { 139*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacssww 140*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacssww %xmm1, (%rdi), %xmm0, %xmm0 141*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 142*9880d681SAndroid Build Coastguard Worker %2 = call <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16> %1, <8 x i16> %a1, <8 x i16> %a2) 143*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacssww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmacswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) { 148*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacswd 149*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacswd %xmm1, (%rdi), %xmm0, %xmm0 150*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 151*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2) 152*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmacswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @commute_fold_vpmacsww(<8 x i16>* %a0, <8 x i16> %a1, <8 x i16> %a2) { 157*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmacsww 158*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmacsww %xmm1, (%rdi), %xmm0, %xmm0 159*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 160*9880d681SAndroid Build Coastguard Worker %2 = call <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16> %1, <8 x i16> %a1, <8 x i16> %a2) 161*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.xop.vpmacsww(<8 x i16>, <8 x i16>, <8 x i16>) nounwind readnone 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmadcsswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) { 166*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmadcsswd 167*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmadcsswd %xmm1, (%rdi), %xmm0, %xmm0 168*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 169*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2) 170*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcsswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_fold_vpmadcswd(<8 x i16>* %a0, <8 x i16> %a1, <4 x i32> %a2) { 175*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: commute_fold_vpmadcswd 176*9880d681SAndroid Build Coastguard Worker ;CHECK: vpmadcswd %xmm1, (%rdi), %xmm0, %xmm0 177*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a0 178*9880d681SAndroid Build Coastguard Worker %2 = call <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16> %1, <8 x i16> %a1, <4 x i32> %a2) 179*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.xop.vpmadcswd(<8 x i16>, <8 x i16>, <4 x i32>) nounwind readnone 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker 185