0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 ; RUN: llc -O1 -mcpu=cortex-a15 -mtriple=armv7-linux-gnueabi -disable-a15-sd-optimization -verify-machineinstrs < %s | FileCheck -check-prefix=CHECK-DISABLED %s
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 ; RUN: llc -O1 -mcpu=cortex-a15 -mtriple=armv7-linux-gnueabi -verify-machineinstrs < %s | FileCheck -check-prefix=CHECK-ENABLED %s
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 ; CHECK-ENABLED-LABEL: t1:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 ; CHECK-DISABLED-LABEL: t1:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 define <2 x float> @t1(float %f) {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 ; CHECK-DISABLED-NOT: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 %i1 = insertelement <2 x float> undef, float %f, i32 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 %i2 = fadd <2 x float> %i1, %i1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 ret <2 x float> %i2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 ; CHECK-ENABLED-LABEL: t2:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 ; CHECK-DISABLED-LABEL: t2:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 define <4 x float> @t2(float %g, float %f) {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 ; CHECK-ENABLED: vdup.32 q{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 ; CHECK-DISABLED-NOT: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 %i1 = insertelement <4 x float> undef, float %f, i32 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 %i2 = fadd <4 x float> %i1, %i1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 ret <4 x float> %i2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 ; CHECK-ENABLED-LABEL: t3:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 ; CHECK-DISABLED-LABEL: t3:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 define arm_aapcs_vfpcc <2 x float> @t3(float %f) {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 ; CHECK-DISABLED-NOT: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 %i1 = insertelement <2 x float> undef, float %f, i32 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 %i2 = fadd <2 x float> %i1, %i1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 ret <2 x float> %i2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 ; CHECK-ENABLED-LABEL: t4:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 ; CHECK-DISABLED-LABEL: t4:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 define <2 x float> @t4(float %f) {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d0[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 ; CHECK-DISABLED-NOT: vdup
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 %i1 = insertelement <2 x float> undef, float %f, i32 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 br label %b
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 ; Block %b has an S-reg as live-in.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 b:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 %i2 = fadd <2 x float> %i1, %i1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 ret <2 x float> %i2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 ; CHECK-ENABLED-LABEL: t5:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 ; CHECK-DISABLED-LABEL: t5:
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 define arm_aapcs_vfpcc <4 x float> @t5(<4 x float> %q, float %f) {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d{{[0-9]*}}[0]
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 ; CHECK-ENABLED: vadd.f32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 ; CHECK-ENABLED-NEXT: bx lr
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 ; CHECK-DISABLED-NOT: vdup
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 %i1 = insertelement <4 x float> %q, float %f, i32 1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 %i2 = fadd <4 x float> %i1, %i1
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 ret <4 x float> %i2
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 }
|
77
|
59
|
|
60 ; Test that DPair can be successfully passed as QPR.
|
|
61 ; CHECK-ENABLED-LABEL: test_DPair1:
|
|
62 ; CHECK-DISABLED-LABEL: test_DPair1:
|
|
63 define void @test_DPair1(i32 %vsout, i8* nocapture %out, float %x, float %y) {
|
|
64 entry:
|
|
65 %0 = insertelement <4 x float> undef, float %x, i32 1
|
|
66 %1 = insertelement <4 x float> %0, float %y, i32 0
|
|
67 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d{{[0-9]*}}[0]
|
|
68 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d{{[0-9]*}}[1]
|
|
69 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d{{[0-9]*}}[0]
|
|
70 ; CHECK-ENABLED: vdup.32 d{{[0-9]*}}, d{{[0-9]*}}[1]
|
|
71 ; CHECK-DISABLED-NOT: vdup
|
|
72 switch i32 %vsout, label %sw.epilog [
|
|
73 i32 1, label %sw.bb
|
|
74 i32 0, label %sw.bb6
|
|
75 ]
|
|
76
|
|
77 sw.bb: ; preds = %entry
|
|
78 %2 = insertelement <4 x float> %1, float 0.000000e+00, i32 0
|
|
79 br label %sw.bb6
|
|
80
|
|
81 sw.bb6: ; preds = %sw.bb, %entry
|
|
82 %sum.0 = phi <4 x float> [ %1, %entry ], [ %2, %sw.bb ]
|
|
83 %3 = extractelement <4 x float> %sum.0, i32 0
|
|
84 %conv = fptoui float %3 to i8
|
|
85 store i8 %conv, i8* %out, align 1
|
|
86 ret void
|
|
87
|
|
88 sw.epilog: ; preds = %entry
|
|
89 ret void
|
|
90 }
|
|
91
|
|
92 ; CHECK-ENABLED-LABEL: test_DPair2:
|
|
93 ; CHECK-DISABLED-LABEL: test_DPair2:
|
|
94 define void @test_DPair2(i32 %vsout, i8* nocapture %out, float %x) {
|
|
95 entry:
|
|
96 %0 = insertelement <4 x float> undef, float %x, i32 0
|
|
97 ; CHECK-ENABLED: vdup.32 q{{[0-9]*}}, d{{[0-9]*}}[0]
|
|
98 ; CHECK-DISABLED-NOT: vdup
|
|
99 switch i32 %vsout, label %sw.epilog [
|
|
100 i32 1, label %sw.bb
|
|
101 i32 0, label %sw.bb1
|
|
102 ]
|
|
103
|
|
104 sw.bb: ; preds = %entry
|
|
105 %1 = insertelement <4 x float> %0, float 0.000000e+00, i32 0
|
|
106 br label %sw.bb1
|
|
107
|
|
108 sw.bb1: ; preds = %entry, %sw.bb
|
|
109 %sum.0 = phi <4 x float> [ %0, %entry ], [ %1, %sw.bb ]
|
|
110 %2 = extractelement <4 x float> %sum.0, i32 0
|
|
111 %conv = fptoui float %2 to i8
|
|
112 store i8 %conv, i8* %out, align 1
|
|
113 br label %sw.epilog
|
|
114
|
|
115 sw.epilog: ; preds = %entry, %sw.bb1
|
|
116 ret void
|
|
117 } |