1; RUN: llc < %s -march=msp430 2; ModuleID = 'mult-alt-generic.c' 3target datalayout = "e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16" 4target triple = "msp430" 5 6@mout0 = common global i16 0, align 2 7@min1 = common global i16 0, align 2 8@marray = common global [2 x i16] zeroinitializer, align 2 9 10define void @single_m() nounwind { 11entry: 12 call void asm "foo $1,$0", "=*m,*m"(i16* @mout0, i16* @min1) nounwind 13 ret void 14} 15 16define void @single_o() nounwind { 17entry: 18 %out0 = alloca i16, align 2 19 %index = alloca i16, align 2 20 store i16 0, i16* %out0, align 2 21 store i16 1, i16* %index, align 2 22 ret void 23} 24 25define void @single_V() nounwind { 26entry: 27 ret void 28} 29 30define void @single_lt() nounwind { 31entry: 32 %out0 = alloca i16, align 2 33 %in1 = alloca i16, align 2 34 store i16 0, i16* %out0, align 2 35 store i16 1, i16* %in1, align 2 36 %tmp = load i16, i16* %in1, align 2 37 %0 = call i16 asm "foo $1,$0", "=r,<r"(i16 %tmp) nounwind 38 store i16 %0, i16* %out0, align 2 39 %tmp1 = load i16, i16* %in1, align 2 40 %1 = call i16 asm "foo $1,$0", "=r,r<"(i16 %tmp1) nounwind 41 store i16 %1, i16* %out0, align 2 42 ret void 43} 44 45define void @single_gt() nounwind { 46entry: 47 %out0 = alloca i16, align 2 48 %in1 = alloca i16, align 2 49 store i16 0, i16* %out0, align 2 50 store i16 1, i16* %in1, align 2 51 %tmp = load i16, i16* %in1, align 2 52 %0 = call i16 asm "foo $1,$0", "=r,>r"(i16 %tmp) nounwind 53 store i16 %0, i16* %out0, align 2 54 %tmp1 = load i16, i16* %in1, align 2 55 %1 = call i16 asm "foo $1,$0", "=r,r>"(i16 %tmp1) nounwind 56 store i16 %1, i16* %out0, align 2 57 ret void 58} 59 60define void @single_r() nounwind { 61entry: 62 %out0 = alloca i16, align 2 63 %in1 = alloca i16, align 2 64 store i16 0, i16* %out0, align 2 65 store i16 1, i16* %in1, align 2 66 %tmp = load i16, i16* %in1, align 2 67 %0 = call i16 asm "foo $1,$0", "=r,r"(i16 %tmp) nounwind 68 store i16 %0, i16* %out0, align 2 69 ret void 70} 71 72define void @single_i() nounwind { 73entry: 74 %out0 = alloca i16, align 2 75 store i16 0, i16* %out0, align 2 76 %0 = call i16 asm "foo $1,$0", "=r,i"(i16 1) nounwind 77 store i16 %0, i16* %out0, align 2 78 ret void 79} 80 81define void @single_n() nounwind { 82entry: 83 %out0 = alloca i16, align 2 84 store i16 0, i16* %out0, align 2 85 %0 = call i16 asm "foo $1,$0", "=r,n"(i16 1) nounwind 86 store i16 %0, i16* %out0, align 2 87 ret void 88} 89 90define void @single_E() nounwind { 91entry: 92 %out0 = alloca double, align 8 93 store double 0.000000e+000, double* %out0, align 8 94; No lowering support. 95; %0 = call double asm "foo $1,$0", "=r,E"(double 1.000000e+001) nounwind 96; store double %0, double* %out0, align 8 97 ret void 98} 99 100define void @single_F() nounwind { 101entry: 102 %out0 = alloca double, align 8 103 store double 0.000000e+000, double* %out0, align 8 104; No lowering support. 105; %0 = call double asm "foo $1,$0", "=r,F"(double 1.000000e+000) nounwind 106; store double %0, double* %out0, align 8 107 ret void 108} 109 110define void @single_s() nounwind { 111entry: 112 %out0 = alloca i16, align 2 113 store i16 0, i16* %out0, align 2 114 ret void 115} 116 117define void @single_g() nounwind { 118entry: 119 %out0 = alloca i16, align 2 120 %in1 = alloca i16, align 2 121 store i16 0, i16* %out0, align 2 122 store i16 1, i16* %in1, align 2 123 %tmp = load i16, i16* %in1, align 2 124 %0 = call i16 asm "foo $1,$0", "=r,imr"(i16 %tmp) nounwind 125 store i16 %0, i16* %out0, align 2 126 %tmp1 = load i16, i16* @min1, align 2 127 %1 = call i16 asm "foo $1,$0", "=r,imr"(i16 %tmp1) nounwind 128 store i16 %1, i16* %out0, align 2 129 %2 = call i16 asm "foo $1,$0", "=r,imr"(i16 1) nounwind 130 store i16 %2, i16* %out0, align 2 131 ret void 132} 133 134define void @single_X() nounwind { 135entry: 136 %out0 = alloca i16, align 2 137 %in1 = alloca i16, align 2 138 store i16 0, i16* %out0, align 2 139 store i16 1, i16* %in1, align 2 140 %tmp = load i16, i16* %in1, align 2 141 %0 = call i16 asm "foo $1,$0", "=r,X"(i16 %tmp) nounwind 142 store i16 %0, i16* %out0, align 2 143 %tmp1 = load i16, i16* @min1, align 2 144 %1 = call i16 asm "foo $1,$0", "=r,X"(i16 %tmp1) nounwind 145 store i16 %1, i16* %out0, align 2 146 %2 = call i16 asm "foo $1,$0", "=r,X"(i16 1) nounwind 147 store i16 %2, i16* %out0, align 2 148 %3 = call i16 asm "foo $1,$0", "=r,X"(i16* getelementptr inbounds ([2 x i16], [2 x i16]* @marray, i32 0, i32 0)) nounwind 149 store i16 %3, i16* %out0, align 2 150; No lowering support. 151; %4 = call i16 asm "foo $1,$0", "=r,X"(double 1.000000e+001) nounwind 152; store i16 %4, i16* %out0, align 2 153; %5 = call i16 asm "foo $1,$0", "=r,X"(double 1.000000e+000) nounwind 154; store i16 %5, i16* %out0, align 2 155 ret void 156} 157 158define void @single_p() nounwind { 159entry: 160 %out0 = alloca i16, align 2 161 store i16 0, i16* %out0, align 2 162 %0 = call i16 asm "foo $1,$0", "=r,r"(i16* getelementptr inbounds ([2 x i16], [2 x i16]* @marray, i32 0, i32 0)) nounwind 163 store i16 %0, i16* %out0, align 2 164 ret void 165} 166 167define void @multi_m() nounwind { 168entry: 169 %tmp = load i16, i16* @min1, align 2 170 call void asm "foo $1,$0", "=*m|r,m|r"(i16* @mout0, i16 %tmp) nounwind 171 ret void 172} 173 174define void @multi_o() nounwind { 175entry: 176 %out0 = alloca i16, align 2 177 %index = alloca i16, align 2 178 store i16 0, i16* %out0, align 2 179 store i16 1, i16* %index, align 2 180 ret void 181} 182 183define void @multi_V() nounwind { 184entry: 185 ret void 186} 187 188define void @multi_lt() nounwind { 189entry: 190 %out0 = alloca i16, align 2 191 %in1 = alloca i16, align 2 192 store i16 0, i16* %out0, align 2 193 store i16 1, i16* %in1, align 2 194 %tmp = load i16, i16* %in1, align 2 195 %0 = call i16 asm "foo $1,$0", "=r|r,r|<r"(i16 %tmp) nounwind 196 store i16 %0, i16* %out0, align 2 197 %tmp1 = load i16, i16* %in1, align 2 198 %1 = call i16 asm "foo $1,$0", "=r|r,r|r<"(i16 %tmp1) nounwind 199 store i16 %1, i16* %out0, align 2 200 ret void 201} 202 203define void @multi_gt() nounwind { 204entry: 205 %out0 = alloca i16, align 2 206 %in1 = alloca i16, align 2 207 store i16 0, i16* %out0, align 2 208 store i16 1, i16* %in1, align 2 209 %tmp = load i16, i16* %in1, align 2 210 %0 = call i16 asm "foo $1,$0", "=r|r,r|>r"(i16 %tmp) nounwind 211 store i16 %0, i16* %out0, align 2 212 %tmp1 = load i16, i16* %in1, align 2 213 %1 = call i16 asm "foo $1,$0", "=r|r,r|r>"(i16 %tmp1) nounwind 214 store i16 %1, i16* %out0, align 2 215 ret void 216} 217 218define void @multi_r() nounwind { 219entry: 220 %out0 = alloca i16, align 2 221 %in1 = alloca i16, align 2 222 store i16 0, i16* %out0, align 2 223 store i16 1, i16* %in1, align 2 224 %tmp = load i16, i16* %in1, align 2 225 %0 = call i16 asm "foo $1,$0", "=r|r,r|m"(i16 %tmp) nounwind 226 store i16 %0, i16* %out0, align 2 227 ret void 228} 229 230define void @multi_i() nounwind { 231entry: 232 %out0 = alloca i16, align 2 233 store i16 0, i16* %out0, align 2 234 %0 = call i16 asm "foo $1,$0", "=r|r,r|i"(i16 1) nounwind 235 store i16 %0, i16* %out0, align 2 236 ret void 237} 238 239define void @multi_n() nounwind { 240entry: 241 %out0 = alloca i16, align 2 242 store i16 0, i16* %out0, align 2 243 %0 = call i16 asm "foo $1,$0", "=r|r,r|n"(i16 1) nounwind 244 store i16 %0, i16* %out0, align 2 245 ret void 246} 247 248define void @multi_E() nounwind { 249entry: 250 %out0 = alloca double, align 8 251 store double 0.000000e+000, double* %out0, align 8 252; No lowering support. 253; %0 = call double asm "foo $1,$0", "=r|r,r|E"(double 1.000000e+001) nounwind 254; store double %0, double* %out0, align 8 255 ret void 256} 257 258define void @multi_F() nounwind { 259entry: 260 %out0 = alloca double, align 8 261 store double 0.000000e+000, double* %out0, align 8 262; No lowering support. 263; %0 = call double asm "foo $1,$0", "=r|r,r|F"(double 1.000000e+000) nounwind 264; store double %0, double* %out0, align 8 265 ret void 266} 267 268define void @multi_s() nounwind { 269entry: 270 %out0 = alloca i16, align 2 271 store i16 0, i16* %out0, align 2 272 ret void 273} 274 275define void @multi_g() nounwind { 276entry: 277 %out0 = alloca i16, align 2 278 %in1 = alloca i16, align 2 279 store i16 0, i16* %out0, align 2 280 store i16 1, i16* %in1, align 2 281 %tmp = load i16, i16* %in1, align 2 282 %0 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 %tmp) nounwind 283 store i16 %0, i16* %out0, align 2 284 %tmp1 = load i16, i16* @min1, align 2 285 %1 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 %tmp1) nounwind 286 store i16 %1, i16* %out0, align 2 287 %2 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 1) nounwind 288 store i16 %2, i16* %out0, align 2 289 ret void 290} 291 292define void @multi_X() nounwind { 293entry: 294 %out0 = alloca i16, align 2 295 %in1 = alloca i16, align 2 296 store i16 0, i16* %out0, align 2 297 store i16 1, i16* %in1, align 2 298 %tmp = load i16, i16* %in1, align 2 299 %0 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 %tmp) nounwind 300 store i16 %0, i16* %out0, align 2 301 %tmp1 = load i16, i16* @min1, align 2 302 %1 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 %tmp1) nounwind 303 store i16 %1, i16* %out0, align 2 304 %2 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 1) nounwind 305 store i16 %2, i16* %out0, align 2 306 %3 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16* getelementptr inbounds ([2 x i16], [2 x i16]* @marray, i32 0, i32 0)) nounwind 307 store i16 %3, i16* %out0, align 2 308; No lowering support. 309; %4 = call i16 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+001) nounwind 310; store i16 %4, i16* %out0, align 2 311; %5 = call i16 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+000) nounwind 312; store i16 %5, i16* %out0, align 2 313 ret void 314} 315 316define void @multi_p() nounwind { 317entry: 318 %out0 = alloca i16, align 2 319 store i16 0, i16* %out0, align 2 320 %0 = call i16 asm "foo $1,$0", "=r|r,r|r"(i16* getelementptr inbounds ([2 x i16], [2 x i16]* @marray, i32 0, i32 0)) nounwind 321 store i16 %0, i16* %out0, align 2 322 ret void 323} 324