1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-linux -mcpu=corei7 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -instsimplify -disable-output < %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF0 5*9880d681SAndroid Build Coastguard Workerdefine <8 x i32*> @SHUFF0(<4 x i32*> %ptrv) nounwind { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %G = shufflevector <4 x i32*> %ptrv, <4 x i32*> %ptrv, <8 x i32> <i32 2, i32 7, i32 1, i32 2, i32 4, i32 5, i32 1, i32 1> 8*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd 9*9880d681SAndroid Build Coastguard Worker ret <8 x i32*> %G 10*9880d681SAndroid Build Coastguard Worker;CHECK: ret 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF1 14*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @SHUFF1(<4 x i32*> %ptrv) nounwind { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %G = shufflevector <4 x i32*> %ptrv, <4 x i32*> %ptrv, <4 x i32> <i32 2, i32 7, i32 7, i32 2> 17*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd 18*9880d681SAndroid Build Coastguard Worker ret <4 x i32*> %G 19*9880d681SAndroid Build Coastguard Worker;CHECK: ret 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker;CHECK: SHUFF3 23*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @SHUFF3(<4 x i8*> %ptrv) nounwind { 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker %G = shufflevector <4 x i8*> %ptrv, <4 x i8*> undef, <4 x i32> <i32 2, i32 7, i32 1, i32 2> 26*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd 27*9880d681SAndroid Build Coastguard Worker ret <4 x i8*> %G 28*9880d681SAndroid Build Coastguard Worker;CHECK: ret 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD0 32*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD0(<4 x i8*>* %p) nounwind { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8*>, <4 x i8*>* %p 35*9880d681SAndroid Build Coastguard Worker;CHECK: movaps 36*9880d681SAndroid Build Coastguard Worker ret <4 x i8*> %G 37*9880d681SAndroid Build Coastguard Worker;CHECK: ret 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD1 41*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD1(<4 x i8*>* %p) nounwind { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8*>, <4 x i8*>* %p 44*9880d681SAndroid Build Coastguard Worker;CHECK: movdqa 45*9880d681SAndroid Build Coastguard Worker;CHECK: pshufd 46*9880d681SAndroid Build Coastguard Worker;CHECK: movdqa 47*9880d681SAndroid Build Coastguard Worker %T = shufflevector <4 x i8*> %G, <4 x i8*> %G, <4 x i32> <i32 7, i32 1, i32 4, i32 3> 48*9880d681SAndroid Build Coastguard Worker store <4 x i8*> %T, <4 x i8*>* %p 49*9880d681SAndroid Build Coastguard Worker ret <4 x i8*> %G 50*9880d681SAndroid Build Coastguard Worker;CHECK: ret 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker;CHECK: LOAD2 54*9880d681SAndroid Build Coastguard Workerdefine <4 x i8*> @LOAD2(<4 x i8*>* %p) nounwind { 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker %I = alloca <4 x i8*> 57*9880d681SAndroid Build Coastguard Worker;CHECK: sub 58*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8*>, <4 x i8*>* %p 59*9880d681SAndroid Build Coastguard Worker;CHECK: movaps 60*9880d681SAndroid Build Coastguard Worker store <4 x i8*> %G, <4 x i8*>* %I 61*9880d681SAndroid Build Coastguard Worker;CHECK: movaps 62*9880d681SAndroid Build Coastguard Worker %Z = load <4 x i8*>, <4 x i8*>* %I 63*9880d681SAndroid Build Coastguard Worker ret <4 x i8*> %Z 64*9880d681SAndroid Build Coastguard Worker;CHECK: add 65*9880d681SAndroid Build Coastguard Worker;CHECK: ret 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker;CHECK: INT2PTR0 69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @INT2PTR0(<4 x i8*>* %p) nounwind { 70*9880d681SAndroid Build Coastguard Workerentry: 71*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8*>, <4 x i8*>* %p 72*9880d681SAndroid Build Coastguard Worker;CHECK: movl 73*9880d681SAndroid Build Coastguard Worker;CHECK: movaps 74*9880d681SAndroid Build Coastguard Worker %K = ptrtoint <4 x i8*> %G to <4 x i32> 75*9880d681SAndroid Build Coastguard Worker;CHECK: ret 76*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %K 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker;CHECK: INT2PTR1 80*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @INT2PTR1(<4 x i8>* %p) nounwind { 81*9880d681SAndroid Build Coastguard Workerentry: 82*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8>, <4 x i8>* %p 83*9880d681SAndroid Build Coastguard Worker;CHECK: movl 84*9880d681SAndroid Build Coastguard Worker;CHECK: pmovzxbd (% 85*9880d681SAndroid Build Coastguard Worker %K = inttoptr <4 x i8> %G to <4 x i32*> 86*9880d681SAndroid Build Coastguard Worker;CHECK: ret 87*9880d681SAndroid Build Coastguard Worker ret <4 x i32*> %K 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker;CHECK: BITCAST0 91*9880d681SAndroid Build Coastguard Workerdefine <4 x i32*> @BITCAST0(<4 x i8*>* %p) nounwind { 92*9880d681SAndroid Build Coastguard Workerentry: 93*9880d681SAndroid Build Coastguard Worker %G = load <4 x i8*>, <4 x i8*>* %p 94*9880d681SAndroid Build Coastguard Worker;CHECK: movl 95*9880d681SAndroid Build Coastguard Worker %T = bitcast <4 x i8*> %G to <4 x i32*> 96*9880d681SAndroid Build Coastguard Worker;CHECK: movaps 97*9880d681SAndroid Build Coastguard Worker;CHECK: ret 98*9880d681SAndroid Build Coastguard Worker ret <4 x i32*> %T 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker;CHECK: BITCAST1 102*9880d681SAndroid Build Coastguard Workerdefine <2 x i32*> @BITCAST1(<2 x i8*>* %p) nounwind { 103*9880d681SAndroid Build Coastguard Workerentry: 104*9880d681SAndroid Build Coastguard Worker %G = load <2 x i8*>, <2 x i8*>* %p 105*9880d681SAndroid Build Coastguard Worker;CHECK: movl 106*9880d681SAndroid Build Coastguard Worker;CHECK: pmovzxdq 107*9880d681SAndroid Build Coastguard Worker %T = bitcast <2 x i8*> %G to <2 x i32*> 108*9880d681SAndroid Build Coastguard Worker;CHECK: ret 109*9880d681SAndroid Build Coastguard Worker ret <2 x i32*> %T 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker;CHECK: ICMP0 113*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ICMP0(<4 x i8*>* %p0, <4 x i8*>* %p1) nounwind { 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %g0 = load <4 x i8*>, <4 x i8*>* %p0 116*9880d681SAndroid Build Coastguard Worker %g1 = load <4 x i8*>, <4 x i8*>* %p1 117*9880d681SAndroid Build Coastguard Worker %k = icmp sgt <4 x i8*> %g0, %g1 118*9880d681SAndroid Build Coastguard Worker ;CHECK: pcmpgtd 119*9880d681SAndroid Build Coastguard Worker %j = select <4 x i1> %k, <4 x i32> <i32 0, i32 1, i32 2, i32 4>, <4 x i32> <i32 9, i32 8, i32 7, i32 6> 120*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %j 121*9880d681SAndroid Build Coastguard Worker ;CHECK: ret 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker;CHECK: ICMP1 125*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ICMP1(<4 x i8*>* %p0, <4 x i8*>* %p1) nounwind { 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker %g0 = load <4 x i8*>, <4 x i8*>* %p0 128*9880d681SAndroid Build Coastguard Worker %g1 = load <4 x i8*>, <4 x i8*>* %p1 129*9880d681SAndroid Build Coastguard Worker %k = icmp eq <4 x i8*> %g0, %g1 130*9880d681SAndroid Build Coastguard Worker ;CHECK: pcmpeqd 131*9880d681SAndroid Build Coastguard Worker %j = select <4 x i1> %k, <4 x i32> <i32 0, i32 1, i32 2, i32 4>, <4 x i32> <i32 9, i32 8, i32 7, i32 6> 132*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %j 133*9880d681SAndroid Build Coastguard Worker ;CHECK: ret 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136