ARM pop of a single register encodes as post-indexed LDR.
[oota-llvm.git] / test / CodeGen / ARM / 2009-10-21-InvalidFNeg.ll
1 ; RUN: llc -mcpu=cortex-a8 -mattr=+neon < %s | grep vneg
2 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64"
3 target triple = "armv7-eabi"
4
5 %aaa = type { %fff, %fff }
6 %bbb = type { [6 x %ddd] }
7 %ccc = type { %eee, %fff }
8 %ddd = type { %fff }
9 %eee = type { %fff, %fff, %fff, %fff }
10 %fff = type { %struct.vec_float4 }
11 %struct.vec_float4 = type { <4 x float> }
12
13 define linkonce_odr arm_aapcs_vfpcc void @foo(%eee* noalias sret %agg.result, i64 %tfrm.0.0, i64 %tfrm.0.1, i64 %tfrm.0.2, i64 %tfrm.0.3, i64 %tfrm.0.4, i64 %tfrm.0.5, i64 %tfrm.0.6, i64 %tfrm.0.7) nounwind noinline {
14 entry:
15   %tmp104 = zext i64 %tfrm.0.2 to i512            ; <i512> [#uses=1]
16   %tmp105 = shl i512 %tmp104, 128                 ; <i512> [#uses=1]
17   %tmp118 = zext i64 %tfrm.0.3 to i512            ; <i512> [#uses=1]
18   %tmp119 = shl i512 %tmp118, 192                 ; <i512> [#uses=1]
19   %ins121 = or i512 %tmp119, %tmp105              ; <i512> [#uses=1]
20   %tmp99 = zext i64 %tfrm.0.4 to i512             ; <i512> [#uses=1]
21   %tmp100 = shl i512 %tmp99, 256                  ; <i512> [#uses=1]
22   %tmp123 = zext i64 %tfrm.0.5 to i512            ; <i512> [#uses=1]
23   %tmp124 = shl i512 %tmp123, 320                 ; <i512> [#uses=1]
24   %tmp96 = zext i64 %tfrm.0.6 to i512             ; <i512> [#uses=1]
25   %tmp97 = shl i512 %tmp96, 384                   ; <i512> [#uses=1]
26   %tmp128 = zext i64 %tfrm.0.7 to i512            ; <i512> [#uses=1]
27   %tmp129 = shl i512 %tmp128, 448                 ; <i512> [#uses=1]
28   %mask.masked = or i512 %tmp124, %tmp100         ; <i512> [#uses=1]
29   %ins131 = or i512 %tmp129, %tmp97               ; <i512> [#uses=1]
30   %tmp109132 = zext i64 %tfrm.0.0 to i128         ; <i128> [#uses=1]
31   %tmp113134 = zext i64 %tfrm.0.1 to i128         ; <i128> [#uses=1]
32   %tmp114133 = shl i128 %tmp113134, 64            ; <i128> [#uses=1]
33   %tmp94 = or i128 %tmp114133, %tmp109132         ; <i128> [#uses=1]
34   %tmp95 = bitcast i128 %tmp94 to <4 x float>     ; <<4 x float>> [#uses=0]
35   %tmp82 = lshr i512 %ins121, 128                 ; <i512> [#uses=1]
36   %tmp83 = trunc i512 %tmp82 to i128              ; <i128> [#uses=1]
37   %tmp84 = bitcast i128 %tmp83 to <4 x float>     ; <<4 x float>> [#uses=0]
38   %tmp86 = lshr i512 %mask.masked, 256            ; <i512> [#uses=1]
39   %tmp87 = trunc i512 %tmp86 to i128              ; <i128> [#uses=1]
40   %tmp88 = bitcast i128 %tmp87 to <4 x float>     ; <<4 x float>> [#uses=0]
41   %tmp90 = lshr i512 %ins131, 384                 ; <i512> [#uses=1]
42   %tmp91 = trunc i512 %tmp90 to i128              ; <i128> [#uses=1]
43   %tmp92 = bitcast i128 %tmp91 to <4 x float>     ; <<4 x float>> [#uses=1]
44   %tmp = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %tmp92 ; <<4 x float>> [#uses=1]
45   %tmp28 = getelementptr inbounds %eee* %agg.result, i32 0, i32 3, i32 0, i32 0 ; <<4 x float>*> [#uses=1]
46   store <4 x float> %tmp, <4 x float>* %tmp28, align 16
47   ret void
48 }