~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/CodeGen/ARM/vcvt-cost.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; We currently estimate the cost of sext/zext/trunc v8(v16)i32 <-> v8(v16)i8
 
2
; instructions as expensive. If lowering is improved the cost model needs to
 
3
; change.
 
4
; RUN: opt < %s  -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -march=arm -mcpu=cortex-a8 | FileCheck %s --check-prefix=COST
 
5
%T0_5 = type <8 x i8>
 
6
%T1_5 = type <8 x i32>
 
7
; CHECK-LABEL: func_cvt5:
 
8
define void @func_cvt5(%T0_5* %loadaddr, %T1_5* %storeaddr) {
 
9
; CHECK: vmovl.s8
 
10
; CHECK: vmovl.s16
 
11
; CHECK: vmovl.s16
 
12
  %v0 = load %T0_5, %T0_5* %loadaddr
 
13
; COST: func_cvt5
 
14
; COST: cost of 3 {{.*}} sext
 
15
  %r = sext %T0_5 %v0 to %T1_5
 
16
  store %T1_5 %r, %T1_5* %storeaddr
 
17
  ret void
 
18
}
 
19
;; We currently estimate the cost of this instruction as expensive. If lowering
 
20
;; is improved the cost needs to change.
 
21
%TA0_5 = type <8 x i8>
 
22
%TA1_5 = type <8 x i32>
 
23
; CHECK-LABEL: func_cvt1:
 
24
define void @func_cvt1(%TA0_5* %loadaddr, %TA1_5* %storeaddr) {
 
25
; CHECK: vmovl.u8
 
26
; CHECK: vmovl.u16
 
27
; CHECK: vmovl.u16
 
28
  %v0 = load %TA0_5, %TA0_5* %loadaddr
 
29
; COST: func_cvt1
 
30
; COST: cost of 3 {{.*}} zext
 
31
  %r = zext %TA0_5 %v0 to %TA1_5
 
32
  store %TA1_5 %r, %TA1_5* %storeaddr
 
33
  ret void
 
34
}
 
35
 
 
36
%T0_51 = type <8 x i32>
 
37
%T1_51 = type <8 x i8>
 
38
; CHECK-LABEL: func_cvt51:
 
39
define void @func_cvt51(%T0_51* %loadaddr, %T1_51* %storeaddr) {
 
40
; CHECK: vmovn.i32
 
41
; CHECK: vmovn.i32
 
42
; CHECK: vmovn.i16
 
43
  %v0 = load %T0_51, %T0_51* %loadaddr
 
44
; COST: func_cvt51
 
45
; COST: cost of 3 {{.*}} trunc
 
46
  %r = trunc %T0_51 %v0 to %T1_51
 
47
  store %T1_51 %r, %T1_51* %storeaddr
 
48
  ret void
 
49
}
 
50
 
 
51
%TT0_5 = type <16 x i8>
 
52
%TT1_5 = type <16 x i32>
 
53
; CHECK-LABEL: func_cvt52:
 
54
define void @func_cvt52(%TT0_5* %loadaddr, %TT1_5* %storeaddr) {
 
55
; CHECK: vmovl.s16
 
56
; CHECK: vmovl.s16
 
57
; CHECK: vmovl.s16
 
58
; CHECK: vmovl.s16
 
59
  %v0 = load %TT0_5, %TT0_5* %loadaddr
 
60
; COST: func_cvt52
 
61
; COST: cost of 6 {{.*}} sext
 
62
  %r = sext %TT0_5 %v0 to %TT1_5
 
63
  store %TT1_5 %r, %TT1_5* %storeaddr
 
64
  ret void
 
65
}
 
66
;; We currently estimate the cost of this instruction as expensive. If lowering
 
67
;; is improved the cost needs to change.
 
68
%TTA0_5 = type <16 x i8>
 
69
%TTA1_5 = type <16 x i32>
 
70
; CHECK-LABEL: func_cvt12:
 
71
define void @func_cvt12(%TTA0_5* %loadaddr, %TTA1_5* %storeaddr) {
 
72
; CHECK: vmovl.u16
 
73
; CHECK: vmovl.u16
 
74
; CHECK: vmovl.u16
 
75
; CHECK: vmovl.u16
 
76
  %v0 = load %TTA0_5, %TTA0_5* %loadaddr
 
77
; COST: func_cvt12
 
78
; COST: cost of 6 {{.*}} zext
 
79
  %r = zext %TTA0_5 %v0 to %TTA1_5
 
80
  store %TTA1_5 %r, %TTA1_5* %storeaddr
 
81
  ret void
 
82
}
 
83
 
 
84
%TT0_51 = type <16 x i32>
 
85
%TT1_51 = type <16 x i8>
 
86
; CHECK-LABEL: func_cvt512:
 
87
define void @func_cvt512(%TT0_51* %loadaddr, %TT1_51* %storeaddr) {
 
88
; CHECK: vmovn.i32
 
89
; CHECK: vmovn.i32
 
90
; CHECK: vmovn.i32
 
91
; CHECK: vmovn.i32
 
92
; CHECK: vmovn.i16
 
93
; CHECK: vmovn.i16
 
94
  %v0 = load %TT0_51, %TT0_51* %loadaddr
 
95
; COST: func_cvt512
 
96
; COST: cost of 6 {{.*}} trunc
 
97
  %r = trunc %TT0_51 %v0 to %TT1_51
 
98
  store %TT1_51 %r, %TT1_51* %storeaddr
 
99
  ret void
 
100
}
 
101
 
 
102
; CHECK-LABEL: sext_v4i16_v4i64:
 
103
define void @sext_v4i16_v4i64(<4 x i16>* %loadaddr, <4 x i64>* %storeaddr) {
 
104
; CHECK: vmovl.s32
 
105
; CHECK: vmovl.s32
 
106
  %v0 = load <4 x i16>, <4 x i16>* %loadaddr
 
107
; COST: sext_v4i16_v4i64
 
108
; COST: cost of 3 {{.*}} sext
 
109
  %r = sext <4 x i16> %v0 to <4 x i64>
 
110
  store <4 x i64> %r, <4 x i64>* %storeaddr
 
111
  ret void
 
112
}
 
113
 
 
114
; CHECK-LABEL: zext_v4i16_v4i64:
 
115
define void @zext_v4i16_v4i64(<4 x i16>* %loadaddr, <4 x i64>* %storeaddr) {
 
116
; CHECK: vmovl.u32
 
117
; CHECK: vmovl.u32
 
118
  %v0 = load <4 x i16>, <4 x i16>* %loadaddr
 
119
; COST: zext_v4i16_v4i64
 
120
; COST: cost of 3 {{.*}} zext
 
121
  %r = zext <4 x i16> %v0 to <4 x i64>
 
122
  store <4 x i64> %r, <4 x i64>* %storeaddr
 
123
  ret void
 
124
}
 
125
 
 
126
; CHECK-LABEL: sext_v8i16_v8i64:
 
127
define void @sext_v8i16_v8i64(<8 x i16>* %loadaddr, <8 x i64>* %storeaddr) {
 
128
; CHECK: vmovl.s32
 
129
; CHECK: vmovl.s32
 
130
; CHECK: vmovl.s32
 
131
; CHECK: vmovl.s32
 
132
  %v0 = load <8 x i16>, <8 x i16>* %loadaddr
 
133
; COST: sext_v8i16_v8i64
 
134
; COST: cost of 6 {{.*}} sext
 
135
  %r = sext <8 x i16> %v0 to <8 x i64>
 
136
  store <8 x i64> %r, <8 x i64>* %storeaddr
 
137
  ret void
 
138
}
 
139
 
 
140
; CHECK-LABEL: zext_v8i16_v8i64:
 
141
define void @zext_v8i16_v8i64(<8 x i16>* %loadaddr, <8 x i64>* %storeaddr) {
 
142
; CHECK: vmovl.u32
 
143
; CHECK: vmovl.u32
 
144
; CHECK: vmovl.u32
 
145
; CHECK: vmovl.u32
 
146
  %v0 = load <8 x i16>, <8 x i16>* %loadaddr
 
147
; COST: zext_v8i16_v8i64
 
148
; COST: cost of 6 {{.*}} zext
 
149
  %r = zext <8 x i16> %v0 to <8 x i64>
 
150
  store <8 x i64> %r, <8 x i64>* %storeaddr
 
151
  ret void
 
152
}
 
153