1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @add_4i32(<4 x i32> %a0, <4 x i32> %a1) { 4*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @add_4i32 5*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 6*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: paddd %xmm1, %xmm0 7*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 8*9880d681SAndroid Build Coastguard Worker %1 = add <4 x i32> %a0, <i32 1, i32 -2, i32 3, i32 -4> 9*9880d681SAndroid Build Coastguard Worker %2 = add <4 x i32> %a1, <i32 -1, i32 2, i32 -3, i32 4> 10*9880d681SAndroid Build Coastguard Worker %3 = add <4 x i32> %1, %2 11*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @add_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) { 15*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @add_4i32_commute 16*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 17*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: paddd %xmm1, %xmm0 18*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 19*9880d681SAndroid Build Coastguard Worker %1 = add <4 x i32> <i32 1, i32 -2, i32 3, i32 -4>, %a0 20*9880d681SAndroid Build Coastguard Worker %2 = add <4 x i32> <i32 -1, i32 2, i32 -3, i32 4>, %a1 21*9880d681SAndroid Build Coastguard Worker %3 = add <4 x i32> %1, %2 22*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mul_4i32(<4 x i32> %a0, <4 x i32> %a1) { 26*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @mul_4i32 27*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 28*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: pmulld %xmm1, %xmm0 29*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: pmulld .LCPI2_0(%rip), %xmm0 30*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 31*9880d681SAndroid Build Coastguard Worker %1 = mul <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4> 32*9880d681SAndroid Build Coastguard Worker %2 = mul <4 x i32> %a1, <i32 4, i32 3, i32 2, i32 1> 33*9880d681SAndroid Build Coastguard Worker %3 = mul <4 x i32> %1, %2 34*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mul_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) { 38*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @mul_4i32_commute 39*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 40*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: pmulld %xmm1, %xmm0 41*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: pmulld .LCPI3_0(%rip), %xmm0 42*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 43*9880d681SAndroid Build Coastguard Worker %1 = mul <4 x i32> <i32 1, i32 2, i32 3, i32 4>, %a0 44*9880d681SAndroid Build Coastguard Worker %2 = mul <4 x i32> <i32 4, i32 3, i32 2, i32 1>, %a1 45*9880d681SAndroid Build Coastguard Worker %3 = mul <4 x i32> %1, %2 46*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @and_4i32(<4 x i32> %a0, <4 x i32> %a1) { 50*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @and_4i32 51*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 52*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: andps %xmm1, %xmm0 53*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: andps .LCPI4_0(%rip), %xmm0 54*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 55*9880d681SAndroid Build Coastguard Worker %1 = and <4 x i32> %a0, <i32 -2, i32 -2, i32 3, i32 3> 56*9880d681SAndroid Build Coastguard Worker %2 = and <4 x i32> %a1, <i32 -1, i32 -1, i32 1, i32 1> 57*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, %2 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> @and_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) { 62*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @and_4i32_commute 63*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 64*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: andps %xmm1, %xmm0 65*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: andps .LCPI5_0(%rip), %xmm0 66*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker %1 = and <4 x i32> <i32 -2, i32 -2, i32 3, i32 3>, %a0 68*9880d681SAndroid Build Coastguard Worker %2 = and <4 x i32> <i32 -1, i32 -1, i32 1, i32 1>, %a1 69*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, %2 70*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @or_4i32(<4 x i32> %a0, <4 x i32> %a1) { 74*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @or_4i32 75*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 76*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: orps %xmm1, %xmm0 77*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: orps .LCPI6_0(%rip), %xmm0 78*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 79*9880d681SAndroid Build Coastguard Worker %1 = or <4 x i32> %a0, <i32 -2, i32 -2, i32 3, i32 3> 80*9880d681SAndroid Build Coastguard Worker %2 = or <4 x i32> %a1, <i32 -1, i32 -1, i32 1, i32 1> 81*9880d681SAndroid Build Coastguard Worker %3 = or <4 x i32> %1, %2 82*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @or_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) { 86*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @or_4i32_commute 87*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 88*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: orps %xmm1, %xmm0 89*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: orps .LCPI7_0(%rip), %xmm0 90*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 91*9880d681SAndroid Build Coastguard Worker %1 = or <4 x i32> <i32 -2, i32 -2, i32 3, i32 3>, %a0 92*9880d681SAndroid Build Coastguard Worker %2 = or <4 x i32> <i32 -1, i32 -1, i32 1, i32 1>, %a1 93*9880d681SAndroid Build Coastguard Worker %3 = or <4 x i32> %1, %2 94*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @xor_4i32(<4 x i32> %a0, <4 x i32> %a1) { 98*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @xor_4i32 99*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 100*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: xorps %xmm1, %xmm0 101*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: xorps .LCPI8_0(%rip), %xmm0 102*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker %1 = xor <4 x i32> %a0, <i32 -2, i32 -2, i32 3, i32 3> 104*9880d681SAndroid Build Coastguard Worker %2 = xor <4 x i32> %a1, <i32 -1, i32 -1, i32 1, i32 1> 105*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i32> %1, %2 106*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @xor_4i32_commute(<4 x i32> %a0, <4 x i32> %a1) { 110*9880d681SAndroid Build Coastguard Worker ;CHECK-LABEL: @xor_4i32_commute 111*9880d681SAndroid Build Coastguard Worker ;CHECK: # BB#0: 112*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: xorps %xmm1, %xmm0 113*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: xorps .LCPI9_0(%rip), %xmm0 114*9880d681SAndroid Build Coastguard Worker ;CHECK-NEXT: retq 115*9880d681SAndroid Build Coastguard Worker %1 = xor <4 x i32> <i32 -2, i32 -2, i32 3, i32 3>, %a0 116*9880d681SAndroid Build Coastguard Worker %2 = xor <4 x i32> <i32 -1, i32 -1, i32 1, i32 1>, %a1 117*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i32> %1, %2 118*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %3 119*9880d681SAndroid Build Coastguard Worker} 120