1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=cortex-a8 -march=thumb 2*9880d681SAndroid Build Coastguard Worker; Test that this doesn't crash. 3*9880d681SAndroid Build Coastguard Worker; <rdar://problem/12183003> 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" 6*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7-apple-ios5.1.0" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdeclare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8*, i32) nounwind readonly 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.arm.neon.vst1.p0i8.v16i8(i8*, <16 x i8>, i32) nounwind 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @findEdges(i8*) nounwind ssp { 13*9880d681SAndroid Build Coastguard Worker %2 = icmp sgt i32 undef, 0 14*9880d681SAndroid Build Coastguard Worker br i1 %2, label %5, label %3 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; <label>:3 ; preds = %5, %1 17*9880d681SAndroid Build Coastguard Worker %4 = phi i8* [ %0, %1 ], [ %19, %5 ] 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; <label>:5 ; preds = %5, %1 21*9880d681SAndroid Build Coastguard Worker %6 = phi i8* [ %19, %5 ], [ %0, %1 ] 22*9880d681SAndroid Build Coastguard Worker %7 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* null, i32 1) 23*9880d681SAndroid Build Coastguard Worker %8 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %7, 0 24*9880d681SAndroid Build Coastguard Worker %9 = getelementptr inbounds i8, i8* null, i32 3 25*9880d681SAndroid Build Coastguard Worker %10 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %9, i32 1) 26*9880d681SAndroid Build Coastguard Worker %11 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %10, 2 27*9880d681SAndroid Build Coastguard Worker %12 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %6, i32 1) 28*9880d681SAndroid Build Coastguard Worker %13 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %12, 0 29*9880d681SAndroid Build Coastguard Worker %14 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %12, 1 30*9880d681SAndroid Build Coastguard Worker %15 = getelementptr inbounds i8, i8* %6, i32 3 31*9880d681SAndroid Build Coastguard Worker %16 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.arm.neon.vld3.v16i8.p0i8(i8* %15, i32 1) 32*9880d681SAndroid Build Coastguard Worker %17 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %16, 1 33*9880d681SAndroid Build Coastguard Worker %18 = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } %16, 2 34*9880d681SAndroid Build Coastguard Worker %19 = getelementptr inbounds i8, i8* %6, i32 48 35*9880d681SAndroid Build Coastguard Worker %20 = bitcast <16 x i8> %13 to <2 x i64> 36*9880d681SAndroid Build Coastguard Worker %21 = bitcast <16 x i8> %8 to <2 x i64> 37*9880d681SAndroid Build Coastguard Worker %22 = bitcast <16 x i8> %14 to <2 x i64> 38*9880d681SAndroid Build Coastguard Worker %23 = shufflevector <2 x i64> %22, <2 x i64> undef, <1 x i32> zeroinitializer 39*9880d681SAndroid Build Coastguard Worker %24 = bitcast <1 x i64> %23 to <8 x i8> 40*9880d681SAndroid Build Coastguard Worker %25 = zext <8 x i8> %24 to <8 x i16> 41*9880d681SAndroid Build Coastguard Worker %26 = sub <8 x i16> zeroinitializer, %25 42*9880d681SAndroid Build Coastguard Worker %27 = bitcast <16 x i8> %17 to <2 x i64> 43*9880d681SAndroid Build Coastguard Worker %28 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %26) nounwind 44*9880d681SAndroid Build Coastguard Worker %29 = mul <8 x i16> %28, %28 45*9880d681SAndroid Build Coastguard Worker %30 = add <8 x i16> zeroinitializer, %29 46*9880d681SAndroid Build Coastguard Worker %31 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> undef, <8 x i16> %30) nounwind 47*9880d681SAndroid Build Coastguard Worker %32 = bitcast <16 x i8> %11 to <2 x i64> 48*9880d681SAndroid Build Coastguard Worker %33 = shufflevector <2 x i64> %32, <2 x i64> undef, <1 x i32> zeroinitializer 49*9880d681SAndroid Build Coastguard Worker %34 = bitcast <1 x i64> %33 to <8 x i8> 50*9880d681SAndroid Build Coastguard Worker %35 = zext <8 x i8> %34 to <8 x i16> 51*9880d681SAndroid Build Coastguard Worker %36 = sub <8 x i16> %35, zeroinitializer 52*9880d681SAndroid Build Coastguard Worker %37 = bitcast <16 x i8> %18 to <2 x i64> 53*9880d681SAndroid Build Coastguard Worker %38 = shufflevector <2 x i64> %37, <2 x i64> undef, <1 x i32> zeroinitializer 54*9880d681SAndroid Build Coastguard Worker %39 = bitcast <1 x i64> %38 to <8 x i8> 55*9880d681SAndroid Build Coastguard Worker %40 = zext <8 x i8> %39 to <8 x i16> 56*9880d681SAndroid Build Coastguard Worker %41 = sub <8 x i16> zeroinitializer, %40 57*9880d681SAndroid Build Coastguard Worker %42 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %36) nounwind 58*9880d681SAndroid Build Coastguard Worker %43 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %41) nounwind 59*9880d681SAndroid Build Coastguard Worker %44 = mul <8 x i16> %42, %42 60*9880d681SAndroid Build Coastguard Worker %45 = mul <8 x i16> %43, %43 61*9880d681SAndroid Build Coastguard Worker %46 = add <8 x i16> %45, %44 62*9880d681SAndroid Build Coastguard Worker %47 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %31, <8 x i16> %46) nounwind 63*9880d681SAndroid Build Coastguard Worker %48 = bitcast <8 x i16> %47 to <2 x i64> 64*9880d681SAndroid Build Coastguard Worker %49 = shufflevector <2 x i64> %48, <2 x i64> undef, <1 x i32> zeroinitializer 65*9880d681SAndroid Build Coastguard Worker %50 = bitcast <1 x i64> %49 to <4 x i16> 66*9880d681SAndroid Build Coastguard Worker %51 = tail call <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16> %50, <4 x i16> undef) nounwind 67*9880d681SAndroid Build Coastguard Worker %52 = tail call <4 x i16> @llvm.arm.neon.vqshiftnu.v4i16(<4 x i32> %51, <4 x i32> <i32 -6, i32 -6, i32 -6, i32 -6>) 68*9880d681SAndroid Build Coastguard Worker %53 = bitcast <4 x i16> %52 to <1 x i64> 69*9880d681SAndroid Build Coastguard Worker %54 = shufflevector <1 x i64> %53, <1 x i64> undef, <2 x i32> <i32 0, i32 1> 70*9880d681SAndroid Build Coastguard Worker %55 = bitcast <2 x i64> %54 to <8 x i16> 71*9880d681SAndroid Build Coastguard Worker %56 = tail call <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16> %55, <8 x i16> <i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8>) 72*9880d681SAndroid Build Coastguard Worker %57 = shufflevector <2 x i64> %20, <2 x i64> undef, <1 x i32> <i32 1> 73*9880d681SAndroid Build Coastguard Worker %58 = bitcast <1 x i64> %57 to <8 x i8> 74*9880d681SAndroid Build Coastguard Worker %59 = zext <8 x i8> %58 to <8 x i16> 75*9880d681SAndroid Build Coastguard Worker %60 = sub <8 x i16> zeroinitializer, %59 76*9880d681SAndroid Build Coastguard Worker %61 = shufflevector <2 x i64> %21, <2 x i64> undef, <1 x i32> <i32 1> 77*9880d681SAndroid Build Coastguard Worker %62 = bitcast <1 x i64> %61 to <8 x i8> 78*9880d681SAndroid Build Coastguard Worker %63 = zext <8 x i8> %62 to <8 x i16> 79*9880d681SAndroid Build Coastguard Worker %64 = sub <8 x i16> %63, zeroinitializer 80*9880d681SAndroid Build Coastguard Worker %65 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %60) nounwind 81*9880d681SAndroid Build Coastguard Worker %66 = mul <8 x i16> %65, %65 82*9880d681SAndroid Build Coastguard Worker %67 = add <8 x i16> zeroinitializer, %66 83*9880d681SAndroid Build Coastguard Worker %68 = shufflevector <2 x i64> %27, <2 x i64> undef, <1 x i32> <i32 1> 84*9880d681SAndroid Build Coastguard Worker %69 = bitcast <1 x i64> %68 to <8 x i8> 85*9880d681SAndroid Build Coastguard Worker %70 = zext <8 x i8> %69 to <8 x i16> 86*9880d681SAndroid Build Coastguard Worker %71 = sub <8 x i16> zeroinitializer, %70 87*9880d681SAndroid Build Coastguard Worker %72 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> undef) nounwind 88*9880d681SAndroid Build Coastguard Worker %73 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %71) nounwind 89*9880d681SAndroid Build Coastguard Worker %74 = mul <8 x i16> %72, %72 90*9880d681SAndroid Build Coastguard Worker %75 = mul <8 x i16> %73, %73 91*9880d681SAndroid Build Coastguard Worker %76 = add <8 x i16> %75, %74 92*9880d681SAndroid Build Coastguard Worker %77 = shufflevector <2 x i64> %32, <2 x i64> undef, <1 x i32> <i32 1> 93*9880d681SAndroid Build Coastguard Worker %78 = bitcast <1 x i64> %77 to <8 x i8> 94*9880d681SAndroid Build Coastguard Worker %79 = zext <8 x i8> %78 to <8 x i16> 95*9880d681SAndroid Build Coastguard Worker %80 = sub <8 x i16> %79, zeroinitializer 96*9880d681SAndroid Build Coastguard Worker %81 = tail call <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16> %80) nounwind 97*9880d681SAndroid Build Coastguard Worker %82 = mul <8 x i16> %81, %81 98*9880d681SAndroid Build Coastguard Worker %83 = add <8 x i16> zeroinitializer, %82 99*9880d681SAndroid Build Coastguard Worker %84 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %76, <8 x i16> %83) nounwind 100*9880d681SAndroid Build Coastguard Worker %85 = tail call <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16> %67, <8 x i16> %84) nounwind 101*9880d681SAndroid Build Coastguard Worker %86 = bitcast <8 x i16> %85 to <2 x i64> 102*9880d681SAndroid Build Coastguard Worker %87 = shufflevector <2 x i64> %86, <2 x i64> undef, <1 x i32> <i32 1> 103*9880d681SAndroid Build Coastguard Worker %88 = bitcast <1 x i64> %87 to <4 x i16> 104*9880d681SAndroid Build Coastguard Worker %89 = tail call <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16> %88, <4 x i16> undef) nounwind 105*9880d681SAndroid Build Coastguard Worker %90 = tail call <4 x i16> @llvm.arm.neon.vqrshiftnu.v4i16(<4 x i32> %89, <4 x i32> <i32 -6, i32 -6, i32 -6, i32 -6>) 106*9880d681SAndroid Build Coastguard Worker %91 = bitcast <4 x i16> %90 to <1 x i64> 107*9880d681SAndroid Build Coastguard Worker %92 = shufflevector <1 x i64> undef, <1 x i64> %91, <2 x i32> <i32 0, i32 1> 108*9880d681SAndroid Build Coastguard Worker %93 = bitcast <2 x i64> %92 to <8 x i16> 109*9880d681SAndroid Build Coastguard Worker %94 = tail call <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16> %93, <8 x i16> <i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8, i16 -8>) 110*9880d681SAndroid Build Coastguard Worker %95 = bitcast <8 x i8> %56 to <1 x i64> 111*9880d681SAndroid Build Coastguard Worker %96 = bitcast <8 x i8> %94 to <1 x i64> 112*9880d681SAndroid Build Coastguard Worker %97 = shufflevector <1 x i64> %95, <1 x i64> %96, <2 x i32> <i32 0, i32 1> 113*9880d681SAndroid Build Coastguard Worker %98 = bitcast <2 x i64> %97 to <16 x i8> 114*9880d681SAndroid Build Coastguard Worker tail call void @llvm.arm.neon.vst1.p0i8.v16i8(i8* null, <16 x i8> %98, i32 1) 115*9880d681SAndroid Build Coastguard Worker %99 = icmp slt i32 undef, undef 116*9880d681SAndroid Build Coastguard Worker br i1 %99, label %5, label %3 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqshiftnu.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.arm.neon.vshiftn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.arm.neon.vqrshiftnu.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.arm.neon.vmullu.v4i32(<4 x i16>, <4 x i16>) nounwind readnone 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.arm.neon.vmaxu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.arm.neon.vabs.v8i16(<8 x i16>) nounwind readnone 130