OLD | NEW |
(Empty) | |
| 1 ; Test handling of constants in function blocks. |
| 2 |
| 3 ; RUN: llvm-as < %s | pnacl-freeze | pnacl-bccompress --remove-abbreviations \ |
| 4 ; RUN: | pnacl-bcdis | FileCheck %s |
| 5 |
| 6 define void @TestIntegers() { |
| 7 |
| 8 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 9 ; CHECK-NEXT: {{.*}}| 3: <1, 2> | i8: |
| 10 ; CHECK-NEXT: {{.*}}| 3: <4, 0> | %c0 = i8 0; |
| 11 ; CHECK-NEXT: {{.*}}| 3: <4, 10> | %c1 = i8 5; |
| 12 ; CHECK-NEXT: {{.*}}| 3: <4, 11> | %c2 = i8 -5; |
| 13 ; CHECK-NEXT: {{.*}}| 3: <3> | %c3 = i8 undef; |
| 14 ; CHECK-NEXT: {{.*}}| 3: <1, 4> | i16: |
| 15 ; CHECK-NEXT: {{.*}}| 3: <4, 0> | %c4 = i16 0; |
| 16 ; CHECK-NEXT: {{.*}}| 3: <4, 20> | %c5 = i16 10; |
| 17 ; CHECK-NEXT: {{.*}}| 3: <4, 21> | %c6 = i16 -10; |
| 18 ; CHECK-NEXT: {{.*}}| 3: <3> | %c7 = i16 undef; |
| 19 ; CHECK-NEXT: {{.*}}| 3: <1, 5> | i32: |
| 20 ; CHECK-NEXT: {{.*}}| 3: <4, 0> | %c8 = i32 0; |
| 21 ; CHECK-NEXT: {{.*}}| 3: <4, 40> | %c9 = i32 20; |
| 22 ; CHECK-NEXT: {{.*}}| 3: <4, 41> | %c10 = i32 -20; |
| 23 ; CHECK-NEXT: {{.*}}| 3: <3> | %c11 = i32 undef; |
| 24 ; CHECK-NEXT: {{.*}}| 3: <1, 6> | i64: |
| 25 ; CHECK-NEXT: {{.*}}| 3: <4, 0> | %c12 = i64 0; |
| 26 ; CHECK-NEXT: {{.*}}| 3: <4, 60> | %c13 = i64 30; |
| 27 ; CHECK-NEXT: {{.*}}| 3: <4, 61> | %c14 = i64 -30; |
| 28 ; CHECK-NEXT: {{.*}}| 3: <3> | %c15 = i64 undef; |
| 29 ; CHECK-NEXT: {{.*}}| 3: <1, 7> | i1: |
| 30 ; CHECK-NEXT: {{.*}}| 3: <4, 0> | %c16 = i1 0; |
| 31 ; CHECK-NEXT: {{.*}}| 3: <4, 3> | %c17 = i1 1; |
| 32 ; CHECK-NEXT: {{.*}}| 3: <3> | %c18 = i1 undef; |
| 33 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 34 ; CHECK-NEXT: | | %b0: |
| 35 |
| 36 ; Test various sized integers |
| 37 %v0 = or i1 true, false |
| 38 %v1 = add i8 0, 0 |
| 39 %v2 = add i8 5, 0 |
| 40 %v3 = add i8 -5, 0 |
| 41 %v4 = and i16 10, 0 |
| 42 %v5 = add i16 -10, 0 |
| 43 %v6 = add i32 20, 0 |
| 44 %v7 = add i32 -20, 0 |
| 45 %v8 = add i64 30, 0 |
| 46 %v9 = add i64 -30, 0 |
| 47 |
| 48 ; CHECK-NEXT: {{.*}}| 3: <2, 2, 3, 11> | %v0 = or i1 %c17, %c16
; |
| 49 ; CHECK-NEXT: {{.*}}| 3: <2, 20, 20, 0> | %v1 = add i8 %c0, %c0; |
| 50 ; CHECK-NEXT: {{.*}}| 3: <2, 20, 21, 0> | %v2 = add i8 %c1, %c0; |
| 51 ; CHECK-NEXT: {{.*}}| 3: <2, 20, 22, 0> | %v3 = add i8 %c2, %c0; |
| 52 ; CHECK-NEXT: {{.*}}| 3: <2, 18, 19, 10> | %v4 = and i16 %c5, %c4
; |
| 53 ; CHECK-NEXT: {{.*}}| 3: <2, 18, 20, 0> | %v5 = add i16 %c6, %c4
; |
| 54 ; CHECK-NEXT: {{.*}}| 3: <2, 16, 17, 0> | %v6 = add i32 %c9, %c8
; |
| 55 ; CHECK-NEXT: {{.*}}| 3: <2, 16, 18, 0> | %v7 = add i32 %c10, %c
8; |
| 56 ; CHECK-NEXT: {{.*}}| 3: <2, 14, 15, 0> | %v8 = add i64 %c13, %c
12; |
| 57 ; CHECK-NEXT: {{.*}}| 3: <2, 14, 16, 0> | %v9 = add i64 %c14, %c
12; |
| 58 |
| 59 ; Test undefined integer values. |
| 60 %v10 = xor i1 undef, 0 |
| 61 %v11 = add i8 undef, 0 |
| 62 %v12 = add i16 undef, 0 |
| 63 %v13 = add i32 undef, 0 |
| 64 %v14 = add i64 undef, 0 |
| 65 ret void |
| 66 |
| 67 ; CHECK-NEXT: {{.*}}| 3: <2, 11, 13, 12> | %v10 = xor i1 %c18, %c
16; |
| 68 ; CHECK-NEXT: {{.*}}| 3: <2, 27, 30, 0> | %v11 = add i8 %c3, %c0
; |
| 69 ; CHECK-NEXT: {{.*}}| 3: <2, 24, 27, 0> | %v12 = add i16 %c7, %c
4; |
| 70 ; CHECK-NEXT: {{.*}}| 3: <2, 21, 24, 0> | %v13 = add i32 %c11, %
c8; |
| 71 ; CHECK-NEXT: {{.*}}| 3: <2, 18, 21, 0> | %v14 = add i64 %c15, %
c12; |
| 72 ; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
| 73 } |
| 74 |
| 75 define void @TestFloats() { |
| 76 |
| 77 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 78 ; CHECK-NEXT: {{.*}}| 3: <1, 0> | float: |
| 79 ; CHECK-NEXT: {{.*}}| 3: <6, 0> | %c0 = float 0; |
| 80 ; CHECK-NEXT: {{.*}}| 3: <6, 1065353216> | %c1 = float 1; |
| 81 ; CHECK-NEXT: {{.*}}| 3: <6, 1088421888> | %c2 = float 7; |
| 82 ; CHECK-NEXT: {{.*}}| 3: <6, 1090519040> | %c3 = float 8; |
| 83 ; CHECK-NEXT: {{.*}}| 3: <3> | %c4 = float undef; |
| 84 ; CHECK-NEXT: {{.*}}| 3: <1, 1> | double: |
| 85 ; CHECK-NEXT: {{.*}}| 3: <6, | %c5 = double 6; |
| 86 ; CHECK-NEXT: | 4618441417868443648> | |
| 87 ; CHECK-NEXT: {{.*}}| 3: <6, | %c6 = double 1; |
| 88 ; CHECK-NEXT: | 4607182418800017408> | |
| 89 ; CHECK-NEXT: {{.*}}| 3: <6, 0> | %c7 = double 0; |
| 90 ; CHECK-NEXT: {{.*}}| 3: <6, | %c8 = double 5; |
| 91 ; CHECK-NEXT: | 4617315517961601024> | |
| 92 ; CHECK-NEXT: {{.*}}| 3: <3> | %c9 = double undef
; |
| 93 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 94 ; CHECK-NEXT: | | %b0: |
| 95 |
| 96 ; Test float and double constants |
| 97 %1 = fadd float 1.0, 0.0 |
| 98 %2 = fadd double 1.0, 0.0 |
| 99 %3 = fsub float 7.000000e+00, 8.000000e+00 |
| 100 %4 = fsub double 5.000000e+00, 6.000000e+00 |
| 101 |
| 102 ; CHECK-NEXT: {{.*}}| 3: <2, 9, 10, 0> | %v0 = fadd float %c1,
%c0; |
| 103 ; CHECK-NEXT: {{.*}}| 3: <2, 5, 4, 0> | %v1 = fadd double %c6,
%c7; |
| 104 ; CHECK-NEXT: {{.*}}| 3: <2, 10, 9, 1> | %v2 = fsub float %c2,
%c3; |
| 105 ; CHECK-NEXT: {{.*}}| 3: <2, 5, 8, 1> | %v3 = fsub double %c8,
%c5; |
| 106 |
| 107 ; Test undefined float and double. |
| 108 %5 = fadd float undef, 0.0 |
| 109 %6 = fsub double undef, 6.000000e+00 |
| 110 ret void |
| 111 |
| 112 ; CHECK-NEXT: {{.*}}| 3: <2, 10, 14, 0> | %v4 = fadd float %c4,
%c0; |
| 113 ; CHECK-NEXT: {{.*}}| 3: <2, 6, 10, 1> | %v5 = fsub double %c9,
%c5; |
| 114 ; CHECK-NEXT: {{.*}}| 3: <10> | ret void; |
| 115 |
| 116 } |
| 117 |
| 118 ; Test float Nan, +Inf, -Inf. |
| 119 ; Note: llvm-as doesn't accept float hex values. Only accepts double |
| 120 ; hex values. |
| 121 define float @GetFloatNan() { |
| 122 ; Generated from NAN in <math.h> |
| 123 ret float 0x7FF8000000000000 |
| 124 |
| 125 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 126 ; CHECK-NEXT: {{.*}}| 3: <1, 0> | float: |
| 127 ; CHECK-NEXT: {{.*}}| 3: <6, 2143289344> | %c0 = float nan; |
| 128 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 129 ; CHECK-NEXT: | | %b0: |
| 130 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret float %c0; |
| 131 |
| 132 } |
| 133 |
| 134 define float @GetFloatInf() { |
| 135 ; Generated from INFINITY in <math.h> |
| 136 ret float 0x7FF0000000000000 |
| 137 |
| 138 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 139 ; CHECK-NEXT: {{.*}}| 3: <1, 0> | float: |
| 140 ; CHECK-NEXT: {{.*}}| 3: <6, 2139095040> | %c0 = float inf; |
| 141 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 142 ; CHECK-NEXT: | | %b0: |
| 143 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret float %c0; |
| 144 |
| 145 } |
| 146 |
| 147 define float @GetFloatNegInf() { |
| 148 ; Generated from -INFINITY in <math.h> |
| 149 ret float 0xFFF0000000000000 |
| 150 |
| 151 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 152 ; CHECK-NEXT: {{.*}}| 3: <1, 0> | float: |
| 153 ; CHECK-NEXT: {{.*}}| 3: <6, 4286578688> | %c0 = float -inf; |
| 154 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 155 ; CHECK-NEXT: | | %b0: |
| 156 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret float %c0; |
| 157 } |
| 158 |
| 159 ; Test double Nan, +Inf, -Inf. |
| 160 define double @GetDoubleNan() { |
| 161 ; Generated from NAN in <math.h> |
| 162 ret double 0x7FF8000000000000 |
| 163 |
| 164 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 165 ; CHECK-NEXT: {{.*}}| 3: <1, 1> | double: |
| 166 ; CHECK-NEXT: {{.*}}| 3: <6, | %c0 = double nan; |
| 167 ; CHECK-NEXT: | 9221120237041090560> | |
| 168 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 169 ; CHECK-NEXT: | | %b0: |
| 170 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret double %c0; |
| 171 |
| 172 } |
| 173 |
| 174 define double @GetDoubleInf() { |
| 175 ; Generated from INFINITY in <math.h> |
| 176 ret double 0x7FF0000000000000 |
| 177 |
| 178 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 179 ; CHECK-NEXT: {{.*}}| 3: <1, 1> | double: |
| 180 ; CHECK-NEXT: {{.*}}| 3: <6, | %c0 = double inf; |
| 181 ; CHECK-NEXT: | 9218868437227405312> | |
| 182 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 183 ; CHECK-NEXT: | | %b0: |
| 184 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret double %c0; |
| 185 |
| 186 } |
| 187 |
| 188 define double @GetDoubleNegInf() { |
| 189 ; Generated from -INFINITY in <math.h> |
| 190 ret double 0xFFF0000000000000 |
| 191 |
| 192 ; CHECK: {{.*}}| 1: <65535, 11, 2> | constants { // BlockI
D = 11 |
| 193 ; CHECK-NEXT: {{.*}}| 3: <1, 1> | double: |
| 194 ; CHECK-NEXT: {{.*}}| 3: <6, | %c0 = double -inf; |
| 195 ; CHECK-NEXT: | 18442240474082181120>| |
| 196 ; CHECK-NEXT: {{.*}}| 0: <65534> | } |
| 197 ; CHECK-NEXT: | | %b0: |
| 198 ; CHECK-NEXT: {{.*}}| 3: <10, 1> | ret double %c0; |
| 199 |
| 200 } |
| 201 |
OLD | NEW |