1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -mtriple=x86_64-unknown -mcpu=x86-64 -mattr=+sse2 < %s | FileCheck %s --check-prefix=SSE 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -mtriple=x86_64-unknown -mcpu=x86-64 -mattr=+avx2 < %s | FileCheck %s --check-prefix=AVX 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; Float Comparisons 7*9880d681SAndroid Build Coastguard Worker; Only equal/not-equal/ordered/unordered can be safely commuted 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_eq(<4 x float>* %a0, <4 x float> %a1) { 11*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_eq: 12*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 13*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps (%rdi), %xmm0 14*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 15*9880d681SAndroid Build Coastguard Worker; 16*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_eq: 17*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 18*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 19*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 20*9880d681SAndroid Build Coastguard Worker; 21*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 22*9880d681SAndroid Build Coastguard Worker %2 = fcmp oeq <4 x float> %1, %a1 23*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 24*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ne(<4 x float>* %a0, <4 x float> %a1) { 28*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ne: 29*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 30*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps (%rdi), %xmm0 31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 32*9880d681SAndroid Build Coastguard Worker; 33*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ne: 34*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 35*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqps (%rdi), %xmm0, %xmm0 36*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 37*9880d681SAndroid Build Coastguard Worker; 38*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 39*9880d681SAndroid Build Coastguard Worker %2 = fcmp une <4 x float> %1, %a1 40*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 41*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ord(<4 x float>* %a0, <4 x float> %a1) { 45*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ord: 46*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 47*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps (%rdi), %xmm0 48*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 49*9880d681SAndroid Build Coastguard Worker; 50*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ord: 51*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordps (%rdi), %xmm0, %xmm0 53*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 54*9880d681SAndroid Build Coastguard Worker; 55*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 56*9880d681SAndroid Build Coastguard Worker %2 = fcmp ord <4 x float> %1, %a1 57*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 58*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_uno(<4 x float>* %a0, <4 x float> %a1) { 62*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_uno: 63*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps (%rdi), %xmm0 65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker; 67*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_uno: 68*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordps (%rdi), %xmm0, %xmm0 70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 71*9880d681SAndroid Build Coastguard Worker; 72*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 73*9880d681SAndroid Build Coastguard Worker %2 = fcmp uno <4 x float> %1, %a1 74*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 75*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_ueq(<4 x float>* %a0, <4 x float> %a1) { 79*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ueq: 80*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 81*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm1 82*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm2 83*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps %xmm0, %xmm2 84*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps %xmm1, %xmm0 85*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orps %xmm2, %xmm0 86*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 87*9880d681SAndroid Build Coastguard Worker; 88*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ueq: 89*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 90*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %xmm1 91*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqps %xmm0, %xmm1, %xmm2 92*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordps %xmm0, %xmm1, %xmm0 93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vorps %xmm2, %xmm0, %xmm0 94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 95*9880d681SAndroid Build Coastguard Worker; 96*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 97*9880d681SAndroid Build Coastguard Worker %2 = fcmp ueq <4 x float> %1, %a1 98*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 99*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_one(<4 x float>* %a0, <4 x float> %a1) { 103*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_one: 104*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 105*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm1 106*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm2 107*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps %xmm0, %xmm2 108*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps %xmm1, %xmm0 109*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andps %xmm2, %xmm0 110*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 111*9880d681SAndroid Build Coastguard Worker; 112*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_one: 113*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 114*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %xmm1 115*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqps %xmm0, %xmm1, %xmm2 116*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordps %xmm0, %xmm1, %xmm0 117*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vandps %xmm2, %xmm0, %xmm0 118*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 119*9880d681SAndroid Build Coastguard Worker; 120*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 121*9880d681SAndroid Build Coastguard Worker %2 = fcmp one <4 x float> %1, %a1 122*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 123*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_lt(<4 x float>* %a0, <4 x float> %a1) { 127*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_lt: 128*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm1 130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltps %xmm0, %xmm1 131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 133*9880d681SAndroid Build Coastguard Worker; 134*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_lt: 135*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 136*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %xmm1 137*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpltps %xmm0, %xmm1, %xmm0 138*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 139*9880d681SAndroid Build Coastguard Worker; 140*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 141*9880d681SAndroid Build Coastguard Worker %2 = fcmp olt <4 x float> %1, %a1 142*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 143*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @commute_cmpps_le(<4 x float>* %a0, <4 x float> %a1) { 147*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_le: 148*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm1 150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpleps %xmm0, %xmm1 151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, %xmm0 152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 153*9880d681SAndroid Build Coastguard Worker; 154*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_le: 155*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 156*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %xmm1 157*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpleps %xmm0, %xmm1, %xmm0 158*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 159*9880d681SAndroid Build Coastguard Worker; 160*9880d681SAndroid Build Coastguard Worker %1 = load <4 x float>, <4 x float>* %a0 161*9880d681SAndroid Build Coastguard Worker %2 = fcmp ole <4 x float> %1, %a1 162*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i32> 163*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_eq_ymm(<8 x float>* %a0, <8 x float> %a1) { 167*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_eq_ymm: 168*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 169*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps (%rdi), %xmm0 170*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps 16(%rdi), %xmm1 171*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_eq_ymm: 174*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqps (%rdi), %ymm0, %ymm0 176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 177*9880d681SAndroid Build Coastguard Worker; 178*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 179*9880d681SAndroid Build Coastguard Worker %2 = fcmp oeq <8 x float> %1, %a1 180*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 181*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ne_ymm(<8 x float>* %a0, <8 x float> %a1) { 185*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ne_ymm: 186*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps (%rdi), %xmm0 188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps 16(%rdi), %xmm1 189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ne_ymm: 192*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 193*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqps (%rdi), %ymm0, %ymm0 194*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 195*9880d681SAndroid Build Coastguard Worker; 196*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 197*9880d681SAndroid Build Coastguard Worker %2 = fcmp une <8 x float> %1, %a1 198*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 199*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ord_ymm(<8 x float>* %a0, <8 x float> %a1) { 203*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ord_ymm: 204*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps (%rdi), %xmm0 206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps 16(%rdi), %xmm1 207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 208*9880d681SAndroid Build Coastguard Worker; 209*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ord_ymm: 210*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 211*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordps (%rdi), %ymm0, %ymm0 212*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 213*9880d681SAndroid Build Coastguard Worker; 214*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 215*9880d681SAndroid Build Coastguard Worker %2 = fcmp ord <8 x float> %1, %a1 216*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 217*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_uno_ymm(<8 x float>* %a0, <8 x float> %a1) { 221*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_uno_ymm: 222*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps (%rdi), %xmm0 224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps 16(%rdi), %xmm1 225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 226*9880d681SAndroid Build Coastguard Worker; 227*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_uno_ymm: 228*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 229*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordps (%rdi), %ymm0, %ymm0 230*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 231*9880d681SAndroid Build Coastguard Worker; 232*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 233*9880d681SAndroid Build Coastguard Worker %2 = fcmp uno <8 x float> %1, %a1 234*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 235*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_ueq_ymm(<8 x float>* %a0, <8 x float> %a1) { 239*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_ueq_ymm: 240*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm2 242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps 16(%rdi), %xmm3 243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm2, %xmm4 244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps %xmm0, %xmm4 245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps %xmm2, %xmm0 246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orps %xmm4, %xmm0 247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm3, %xmm2 248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqps %xmm1, %xmm2 249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordps %xmm3, %xmm1 250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orps %xmm2, %xmm1 251*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 252*9880d681SAndroid Build Coastguard Worker; 253*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_ueq_ymm: 254*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 255*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %ymm1 256*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqps %ymm0, %ymm1, %ymm2 257*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordps %ymm0, %ymm1, %ymm0 258*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vorps %ymm2, %ymm0, %ymm0 259*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 260*9880d681SAndroid Build Coastguard Worker; 261*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 262*9880d681SAndroid Build Coastguard Worker %2 = fcmp ueq <8 x float> %1, %a1 263*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 264*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_one_ymm(<8 x float>* %a0, <8 x float> %a1) { 268*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_one_ymm: 269*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 270*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm2 271*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps 16(%rdi), %xmm3 272*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm2, %xmm4 273*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps %xmm0, %xmm4 274*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps %xmm2, %xmm0 275*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andps %xmm4, %xmm0 276*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm3, %xmm2 277*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqps %xmm1, %xmm2 278*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordps %xmm3, %xmm1 279*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andps %xmm2, %xmm1 280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 281*9880d681SAndroid Build Coastguard Worker; 282*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_one_ymm: 283*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 284*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %ymm1 285*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqps %ymm0, %ymm1, %ymm2 286*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordps %ymm0, %ymm1, %ymm0 287*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vandps %ymm2, %ymm0, %ymm0 288*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 289*9880d681SAndroid Build Coastguard Worker; 290*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 291*9880d681SAndroid Build Coastguard Worker %2 = fcmp one <8 x float> %1, %a1 292*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 293*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_lt_ymm(<8 x float>* %a0, <8 x float> %a1) { 297*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_lt_ymm: 298*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 299*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm2 300*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps 16(%rdi), %xmm3 301*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltps %xmm0, %xmm2 302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltps %xmm1, %xmm3 303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm2, %xmm0 304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm3, %xmm1 305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 306*9880d681SAndroid Build Coastguard Worker; 307*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_lt_ymm: 308*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 309*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %ymm1 310*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 311*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 312*9880d681SAndroid Build Coastguard Worker; 313*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 314*9880d681SAndroid Build Coastguard Worker %2 = fcmp olt <8 x float> %1, %a1 315*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 316*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @commute_cmpps_le_ymm(<8 x float>* %a0, <8 x float> %a1) { 320*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmpps_le_ymm: 321*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 322*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps (%rdi), %xmm2 323*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps 16(%rdi), %xmm3 324*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpleps %xmm0, %xmm2 325*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpleps %xmm1, %xmm3 326*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm2, %xmm0 327*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm3, %xmm1 328*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 329*9880d681SAndroid Build Coastguard Worker; 330*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmpps_le_ymm: 331*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 332*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps (%rdi), %ymm1 333*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpleps %ymm0, %ymm1, %ymm0 334*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 335*9880d681SAndroid Build Coastguard Worker; 336*9880d681SAndroid Build Coastguard Worker %1 = load <8 x float>, <8 x float>* %a0 337*9880d681SAndroid Build Coastguard Worker %2 = fcmp ole <8 x float> %1, %a1 338*9880d681SAndroid Build Coastguard Worker %3 = sext <8 x i1> %2 to <8 x i32> 339*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %3 340*9880d681SAndroid Build Coastguard Worker} 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker; 343*9880d681SAndroid Build Coastguard Worker; Double Comparisons 344*9880d681SAndroid Build Coastguard Worker; Only equal/not-equal/ordered/unordered can be safely commuted 345*9880d681SAndroid Build Coastguard Worker; 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_eq(<2 x double>* %a0, <2 x double> %a1) { 348*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_eq: 349*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd (%rdi), %xmm0 351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 352*9880d681SAndroid Build Coastguard Worker; 353*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_eq: 354*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 355*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqpd (%rdi), %xmm0, %xmm0 356*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 357*9880d681SAndroid Build Coastguard Worker; 358*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 359*9880d681SAndroid Build Coastguard Worker %2 = fcmp oeq <2 x double> %1, %a1 360*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 361*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ne(<2 x double>* %a0, <2 x double> %a1) { 365*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ne: 366*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 367*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd (%rdi), %xmm0 368*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 369*9880d681SAndroid Build Coastguard Worker; 370*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ne: 371*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 372*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqpd (%rdi), %xmm0, %xmm0 373*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 374*9880d681SAndroid Build Coastguard Worker; 375*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 376*9880d681SAndroid Build Coastguard Worker %2 = fcmp une <2 x double> %1, %a1 377*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 378*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 379*9880d681SAndroid Build Coastguard Worker} 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ord(<2 x double>* %a0, <2 x double> %a1) { 382*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ord: 383*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 384*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd (%rdi), %xmm0 385*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 386*9880d681SAndroid Build Coastguard Worker; 387*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ord: 388*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 389*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordpd (%rdi), %xmm0, %xmm0 390*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 391*9880d681SAndroid Build Coastguard Worker; 392*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 393*9880d681SAndroid Build Coastguard Worker %2 = fcmp ord <2 x double> %1, %a1 394*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 395*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_ueq(<2 x double>* %a0, <2 x double> %a1) { 399*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ueq: 400*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm1 402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm2 403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd %xmm0, %xmm2 404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd %xmm1, %xmm0 405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orpd %xmm2, %xmm0 406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 407*9880d681SAndroid Build Coastguard Worker; 408*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ueq: 409*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 410*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %xmm1 411*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqpd %xmm0, %xmm1, %xmm2 412*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordpd %xmm0, %xmm1, %xmm0 413*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vorpd %xmm2, %xmm0, %xmm0 414*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 415*9880d681SAndroid Build Coastguard Worker; 416*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 417*9880d681SAndroid Build Coastguard Worker %2 = fcmp ueq <2 x double> %1, %a1 418*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 419*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 420*9880d681SAndroid Build Coastguard Worker} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_one(<2 x double>* %a0, <2 x double> %a1) { 423*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_one: 424*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 425*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm1 426*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm2 427*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd %xmm0, %xmm2 428*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd %xmm1, %xmm0 429*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andpd %xmm2, %xmm0 430*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 431*9880d681SAndroid Build Coastguard Worker; 432*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_one: 433*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 434*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %xmm1 435*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqpd %xmm0, %xmm1, %xmm2 436*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordpd %xmm0, %xmm1, %xmm0 437*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vandpd %xmm2, %xmm0, %xmm0 438*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 439*9880d681SAndroid Build Coastguard Worker; 440*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 441*9880d681SAndroid Build Coastguard Worker %2 = fcmp one <2 x double> %1, %a1 442*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 443*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 444*9880d681SAndroid Build Coastguard Worker} 445*9880d681SAndroid Build Coastguard Worker 446*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_uno(<2 x double>* %a0, <2 x double> %a1) { 447*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_uno: 448*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd (%rdi), %xmm0 450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 451*9880d681SAndroid Build Coastguard Worker; 452*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_uno: 453*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 454*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordpd (%rdi), %xmm0, %xmm0 455*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 456*9880d681SAndroid Build Coastguard Worker; 457*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 458*9880d681SAndroid Build Coastguard Worker %2 = fcmp uno <2 x double> %1, %a1 459*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 460*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 461*9880d681SAndroid Build Coastguard Worker} 462*9880d681SAndroid Build Coastguard Worker 463*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_lt(<2 x double>* %a0, <2 x double> %a1) { 464*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_lt: 465*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm1 467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltpd %xmm0, %xmm1 468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 469*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 470*9880d681SAndroid Build Coastguard Worker; 471*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_lt: 472*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %xmm1 474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpltpd %xmm0, %xmm1, %xmm0 475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 476*9880d681SAndroid Build Coastguard Worker; 477*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 478*9880d681SAndroid Build Coastguard Worker %2 = fcmp olt <2 x double> %1, %a1 479*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 480*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 481*9880d681SAndroid Build Coastguard Worker} 482*9880d681SAndroid Build Coastguard Worker 483*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @commute_cmppd_le(<2 x double>* %a0, <2 x double> %a1) { 484*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_le: 485*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 486*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm1 487*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmplepd %xmm0, %xmm1 488*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm1, %xmm0 489*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 490*9880d681SAndroid Build Coastguard Worker; 491*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_le: 492*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 493*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %xmm1 494*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmplepd %xmm0, %xmm1, %xmm0 495*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 496*9880d681SAndroid Build Coastguard Worker; 497*9880d681SAndroid Build Coastguard Worker %1 = load <2 x double>, <2 x double>* %a0 498*9880d681SAndroid Build Coastguard Worker %2 = fcmp ole <2 x double> %1, %a1 499*9880d681SAndroid Build Coastguard Worker %3 = sext <2 x i1> %2 to <2 x i64> 500*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %3 501*9880d681SAndroid Build Coastguard Worker} 502*9880d681SAndroid Build Coastguard Worker 503*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_eq_ymmm(<4 x double>* %a0, <4 x double> %a1) { 504*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_eq_ymmm: 505*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd (%rdi), %xmm0 507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd 16(%rdi), %xmm1 508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 509*9880d681SAndroid Build Coastguard Worker; 510*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_eq_ymmm: 511*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 512*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqpd (%rdi), %ymm0, %ymm0 513*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 514*9880d681SAndroid Build Coastguard Worker; 515*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 516*9880d681SAndroid Build Coastguard Worker %2 = fcmp oeq <4 x double> %1, %a1 517*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 518*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 519*9880d681SAndroid Build Coastguard Worker} 520*9880d681SAndroid Build Coastguard Worker 521*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ne_ymmm(<4 x double>* %a0, <4 x double> %a1) { 522*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ne_ymmm: 523*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd (%rdi), %xmm0 525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd 16(%rdi), %xmm1 526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 527*9880d681SAndroid Build Coastguard Worker; 528*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ne_ymmm: 529*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 530*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqpd (%rdi), %ymm0, %ymm0 531*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 532*9880d681SAndroid Build Coastguard Worker; 533*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 534*9880d681SAndroid Build Coastguard Worker %2 = fcmp une <4 x double> %1, %a1 535*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 536*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 537*9880d681SAndroid Build Coastguard Worker} 538*9880d681SAndroid Build Coastguard Worker 539*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ord_ymmm(<4 x double>* %a0, <4 x double> %a1) { 540*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ord_ymmm: 541*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 542*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd (%rdi), %xmm0 543*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd 16(%rdi), %xmm1 544*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 545*9880d681SAndroid Build Coastguard Worker; 546*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ord_ymmm: 547*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 548*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordpd (%rdi), %ymm0, %ymm0 549*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 550*9880d681SAndroid Build Coastguard Worker; 551*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 552*9880d681SAndroid Build Coastguard Worker %2 = fcmp ord <4 x double> %1, %a1 553*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 554*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 555*9880d681SAndroid Build Coastguard Worker} 556*9880d681SAndroid Build Coastguard Worker 557*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_uno_ymmm(<4 x double>* %a0, <4 x double> %a1) { 558*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_uno_ymmm: 559*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd (%rdi), %xmm0 561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd 16(%rdi), %xmm1 562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 563*9880d681SAndroid Build Coastguard Worker; 564*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_uno_ymmm: 565*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 566*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordpd (%rdi), %ymm0, %ymm0 567*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 568*9880d681SAndroid Build Coastguard Worker; 569*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 570*9880d681SAndroid Build Coastguard Worker %2 = fcmp uno <4 x double> %1, %a1 571*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 572*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 573*9880d681SAndroid Build Coastguard Worker} 574*9880d681SAndroid Build Coastguard Worker 575*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_ueq_ymmm(<4 x double>* %a0, <4 x double> %a1) { 576*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_ueq_ymmm: 577*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm2 579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd 16(%rdi), %xmm3 580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm2, %xmm4 581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd %xmm0, %xmm4 582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd %xmm2, %xmm0 583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orpd %xmm4, %xmm0 584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm3, %xmm2 585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpeqpd %xmm1, %xmm2 586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpunordpd %xmm3, %xmm1 587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: orpd %xmm2, %xmm1 588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 589*9880d681SAndroid Build Coastguard Worker; 590*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_ueq_ymmm: 591*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 592*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %ymm1 593*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpeqpd %ymm0, %ymm1, %ymm2 594*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpunordpd %ymm0, %ymm1, %ymm0 595*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vorpd %ymm2, %ymm0, %ymm0 596*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 597*9880d681SAndroid Build Coastguard Worker; 598*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 599*9880d681SAndroid Build Coastguard Worker %2 = fcmp ueq <4 x double> %1, %a1 600*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 601*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 602*9880d681SAndroid Build Coastguard Worker} 603*9880d681SAndroid Build Coastguard Worker 604*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_one_ymmm(<4 x double>* %a0, <4 x double> %a1) { 605*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_one_ymmm: 606*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm2 608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd 16(%rdi), %xmm3 609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm2, %xmm4 610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd %xmm0, %xmm4 611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd %xmm2, %xmm0 612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andpd %xmm4, %xmm0 613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm3, %xmm2 614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpneqpd %xmm1, %xmm2 615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpordpd %xmm3, %xmm1 616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andpd %xmm2, %xmm1 617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 618*9880d681SAndroid Build Coastguard Worker; 619*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_one_ymmm: 620*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 621*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %ymm1 622*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpneqpd %ymm0, %ymm1, %ymm2 623*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpordpd %ymm0, %ymm1, %ymm0 624*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vandpd %ymm2, %ymm0, %ymm0 625*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 626*9880d681SAndroid Build Coastguard Worker; 627*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 628*9880d681SAndroid Build Coastguard Worker %2 = fcmp one <4 x double> %1, %a1 629*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 630*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 631*9880d681SAndroid Build Coastguard Worker} 632*9880d681SAndroid Build Coastguard Worker 633*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_lt_ymmm(<4 x double>* %a0, <4 x double> %a1) { 634*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_lt_ymmm: 635*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 636*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm2 637*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd 16(%rdi), %xmm3 638*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltpd %xmm0, %xmm2 639*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmpltpd %xmm1, %xmm3 640*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm2, %xmm0 641*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm3, %xmm1 642*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 643*9880d681SAndroid Build Coastguard Worker; 644*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_lt_ymmm: 645*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 646*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %ymm1 647*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 648*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 649*9880d681SAndroid Build Coastguard Worker; 650*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 651*9880d681SAndroid Build Coastguard Worker %2 = fcmp olt <4 x double> %1, %a1 652*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 653*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 654*9880d681SAndroid Build Coastguard Worker} 655*9880d681SAndroid Build Coastguard Worker 656*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @commute_cmppd_le_ymmm(<4 x double>* %a0, <4 x double> %a1) { 657*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: commute_cmppd_le_ymmm: 658*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd (%rdi), %xmm2 660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd 16(%rdi), %xmm3 661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmplepd %xmm0, %xmm2 662*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: cmplepd %xmm1, %xmm3 663*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm2, %xmm0 664*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movapd %xmm3, %xmm1 665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 666*9880d681SAndroid Build Coastguard Worker; 667*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: commute_cmppd_le_ymmm: 668*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 669*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovapd (%rdi), %ymm1 670*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vcmplepd %ymm0, %ymm1, %ymm0 671*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 672*9880d681SAndroid Build Coastguard Worker; 673*9880d681SAndroid Build Coastguard Worker %1 = load <4 x double>, <4 x double>* %a0 674*9880d681SAndroid Build Coastguard Worker %2 = fcmp ole <4 x double> %1, %a1 675*9880d681SAndroid Build Coastguard Worker %3 = sext <4 x i1> %2 to <4 x i64> 676*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %3 677*9880d681SAndroid Build Coastguard Worker} 678