1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx -x86-experimental-vector-widening-legalization | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Check that we perform a scalar XOR on i32. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK: pull_bitcast 6*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 7*9880d681SAndroid Build Coastguard Worker; CHECK: ret 8*9880d681SAndroid Build Coastguard Workerdefine void @pull_bitcast (<4 x i8>* %pA, <4 x i8>* %pB) { 9*9880d681SAndroid Build Coastguard Worker %A = load <4 x i8>, <4 x i8>* %pA 10*9880d681SAndroid Build Coastguard Worker %B = load <4 x i8>, <4 x i8>* %pB 11*9880d681SAndroid Build Coastguard Worker %C = xor <4 x i8> %A, %B 12*9880d681SAndroid Build Coastguard Worker store <4 x i8> %C, <4 x i8>* %pA 13*9880d681SAndroid Build Coastguard Worker ret void 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK: multi_use_swizzle 17*9880d681SAndroid Build Coastguard Worker; CHECK: pshufd 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pblendw 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pshufd 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pxor 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 24*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @multi_use_swizzle (<4 x i32>* %pA, <4 x i32>* %pB) { 25*9880d681SAndroid Build Coastguard Worker %A = load <4 x i32>, <4 x i32>* %pA 26*9880d681SAndroid Build Coastguard Worker %B = load <4 x i32>, <4 x i32>* %pB 27*9880d681SAndroid Build Coastguard Worker %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 1, i32 5, i32 6> 28*9880d681SAndroid Build Coastguard Worker %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 3, i32 2, i32 2> 29*9880d681SAndroid Build Coastguard Worker %S2 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 2, i32 1, i32 0, i32 2> 30*9880d681SAndroid Build Coastguard Worker %R = xor <4 x i32> %S1, %S2 31*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %R 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; CHECK: pull_bitcast2 35*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 36*9880d681SAndroid Build Coastguard Worker; CHECK: ret 37*9880d681SAndroid Build Coastguard Workerdefine <4 x i8> @pull_bitcast2 (<4 x i8>* %pA, <4 x i8>* %pB, <4 x i8>* %pC) { 38*9880d681SAndroid Build Coastguard Worker %A = load <4 x i8>, <4 x i8>* %pA 39*9880d681SAndroid Build Coastguard Worker store <4 x i8> %A, <4 x i8>* %pC 40*9880d681SAndroid Build Coastguard Worker %B = load <4 x i8>, <4 x i8>* %pB 41*9880d681SAndroid Build Coastguard Worker %C = xor <4 x i8> %A, %B 42*9880d681SAndroid Build Coastguard Worker store <4 x i8> %C, <4 x i8>* %pA 43*9880d681SAndroid Build Coastguard Worker ret <4 x i8> %C 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; CHECK: reverse_1 49*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: pshufd 50*9880d681SAndroid Build Coastguard Worker; CHECK: ret 51*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @reverse_1 (<4 x i32>* %pA, <4 x i32>* %pB) { 52*9880d681SAndroid Build Coastguard Worker %A = load <4 x i32>, <4 x i32>* %pA 53*9880d681SAndroid Build Coastguard Worker %B = load <4 x i32>, <4 x i32>* %pB 54*9880d681SAndroid Build Coastguard Worker %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> 55*9880d681SAndroid Build Coastguard Worker %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2> 56*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %S1 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK: no_reverse_shuff 61*9880d681SAndroid Build Coastguard Worker; CHECK: pshufd 62*9880d681SAndroid Build Coastguard Worker; CHECK: ret 63*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @no_reverse_shuff (<4 x i32>* %pA, <4 x i32>* %pB) { 64*9880d681SAndroid Build Coastguard Worker %A = load <4 x i32>, <4 x i32>* %pA 65*9880d681SAndroid Build Coastguard Worker %B = load <4 x i32>, <4 x i32>* %pB 66*9880d681SAndroid Build Coastguard Worker %S = shufflevector <4 x i32> %A, <4 x i32> %B, <4 x i32> <i32 1, i32 0, i32 3, i32 2> 67*9880d681SAndroid Build Coastguard Worker %S1 = shufflevector <4 x i32> %S, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 3, i32 2> 68*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %S1 69*9880d681SAndroid Build Coastguard Worker} 70