324 lines · plain
1; RUN: llc < %s -mtriple=msp430 -no-integrated-as2; 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 27@min1 = common global i16 0, align 28@marray = common global [2 x i16] zeroinitializer, align 29 10define void @single_m() nounwind {11entry:12 call void asm "foo $1,$0", "=*m,*m"(ptr elementtype(i16) @mout0, ptr elementtype(i16) @min1) nounwind13 ret void14}15 16define void @single_o() nounwind {17entry:18 %out0 = alloca i16, align 219 %index = alloca i16, align 220 store i16 0, ptr %out0, align 221 store i16 1, ptr %index, align 222 ret void23}24 25define void @single_V() nounwind {26entry:27 ret void28}29 30define void @single_lt() nounwind {31entry:32 %out0 = alloca i16, align 233 %in1 = alloca i16, align 234 store i16 0, ptr %out0, align 235 store i16 1, ptr %in1, align 236 %tmp = load i16, ptr %in1, align 237 %0 = call i16 asm "foo $1,$0", "=r,<r"(i16 %tmp) nounwind38 store i16 %0, ptr %out0, align 239 %tmp1 = load i16, ptr %in1, align 240 %1 = call i16 asm "foo $1,$0", "=r,r<"(i16 %tmp1) nounwind41 store i16 %1, ptr %out0, align 242 ret void43}44 45define void @single_gt() nounwind {46entry:47 %out0 = alloca i16, align 248 %in1 = alloca i16, align 249 store i16 0, ptr %out0, align 250 store i16 1, ptr %in1, align 251 %tmp = load i16, ptr %in1, align 252 %0 = call i16 asm "foo $1,$0", "=r,>r"(i16 %tmp) nounwind53 store i16 %0, ptr %out0, align 254 %tmp1 = load i16, ptr %in1, align 255 %1 = call i16 asm "foo $1,$0", "=r,r>"(i16 %tmp1) nounwind56 store i16 %1, ptr %out0, align 257 ret void58}59 60define void @single_r() nounwind {61entry:62 %out0 = alloca i16, align 263 %in1 = alloca i16, align 264 store i16 0, ptr %out0, align 265 store i16 1, ptr %in1, align 266 %tmp = load i16, ptr %in1, align 267 %0 = call i16 asm "foo $1,$0", "=r,r"(i16 %tmp) nounwind68 store i16 %0, ptr %out0, align 269 ret void70}71 72define void @single_i() nounwind {73entry:74 %out0 = alloca i16, align 275 store i16 0, ptr %out0, align 276 %0 = call i16 asm "foo $1,$0", "=r,i"(i16 1) nounwind77 store i16 %0, ptr %out0, align 278 ret void79}80 81define void @single_n() nounwind {82entry:83 %out0 = alloca i16, align 284 store i16 0, ptr %out0, align 285 %0 = call i16 asm "foo $1,$0", "=r,n"(i16 1) nounwind86 store i16 %0, ptr %out0, align 287 ret void88}89 90define void @single_E() nounwind {91entry:92 %out0 = alloca double, align 893 store double 0.000000e+000, ptr %out0, align 894; No lowering support.95; %0 = call double asm "foo $1,$0", "=r,E"(double 1.000000e+001) nounwind96; store double %0, double* %out0, align 897 ret void98}99 100define void @single_F() nounwind {101entry:102 %out0 = alloca double, align 8103 store double 0.000000e+000, ptr %out0, align 8104; No lowering support.105; %0 = call double asm "foo $1,$0", "=r,F"(double 1.000000e+000) nounwind106; store double %0, double* %out0, align 8107 ret void108}109 110define void @single_s() nounwind {111entry:112 %out0 = alloca i16, align 2113 store i16 0, ptr %out0, align 2114 ret void115}116 117define void @single_g() nounwind {118entry:119 %out0 = alloca i16, align 2120 %in1 = alloca i16, align 2121 store i16 0, ptr %out0, align 2122 store i16 1, ptr %in1, align 2123 %tmp = load i16, ptr %in1, align 2124 %0 = call i16 asm "foo $1,$0", "=r,imr"(i16 %tmp) nounwind125 store i16 %0, ptr %out0, align 2126 %tmp1 = load i16, ptr @min1, align 2127 %1 = call i16 asm "foo $1,$0", "=r,imr"(i16 %tmp1) nounwind128 store i16 %1, ptr %out0, align 2129 %2 = call i16 asm "foo $1,$0", "=r,imr"(i16 1) nounwind130 store i16 %2, ptr %out0, align 2131 ret void132}133 134define void @single_X() nounwind {135entry:136 %out0 = alloca i16, align 2137 %in1 = alloca i16, align 2138 store i16 0, ptr %out0, align 2139 store i16 1, ptr %in1, align 2140 %tmp = load i16, ptr %in1, align 2141 %0 = call i16 asm "foo $1,$0", "=r,X"(i16 %tmp) nounwind142 store i16 %0, ptr %out0, align 2143 %tmp1 = load i16, ptr @min1, align 2144 %1 = call i16 asm "foo $1,$0", "=r,X"(i16 %tmp1) nounwind145 store i16 %1, ptr %out0, align 2146 %2 = call i16 asm "foo $1,$0", "=r,X"(i16 1) nounwind147 store i16 %2, ptr %out0, align 2148 %3 = call i16 asm "foo $1,$0", "=r,X"(ptr @marray) nounwind149 store i16 %3, ptr %out0, align 2150; No lowering support.151; %4 = call i16 asm "foo $1,$0", "=r,X"(double 1.000000e+001) nounwind152; store i16 %4, i16* %out0, align 2153; %5 = call i16 asm "foo $1,$0", "=r,X"(double 1.000000e+000) nounwind154; store i16 %5, i16* %out0, align 2155 ret void156}157 158define void @single_p() nounwind {159entry:160 %out0 = alloca i16, align 2161 store i16 0, ptr %out0, align 2162 %0 = call i16 asm "foo $1,$0", "=r,r"(ptr @marray) nounwind163 store i16 %0, ptr %out0, align 2164 ret void165}166 167define void @multi_m() nounwind {168entry:169 %tmp = load i16, ptr @min1, align 2170 call void asm "foo $1,$0", "=*m|r,m|r"(ptr elementtype(i16) @mout0, i16 %tmp) nounwind171 ret void172}173 174define void @multi_o() nounwind {175entry:176 %out0 = alloca i16, align 2177 %index = alloca i16, align 2178 store i16 0, ptr %out0, align 2179 store i16 1, ptr %index, align 2180 ret void181}182 183define void @multi_V() nounwind {184entry:185 ret void186}187 188define void @multi_lt() nounwind {189entry:190 %out0 = alloca i16, align 2191 %in1 = alloca i16, align 2192 store i16 0, ptr %out0, align 2193 store i16 1, ptr %in1, align 2194 %tmp = load i16, ptr %in1, align 2195 %0 = call i16 asm "foo $1,$0", "=r|r,r|<r"(i16 %tmp) nounwind196 store i16 %0, ptr %out0, align 2197 %tmp1 = load i16, ptr %in1, align 2198 %1 = call i16 asm "foo $1,$0", "=r|r,r|r<"(i16 %tmp1) nounwind199 store i16 %1, ptr %out0, align 2200 ret void201}202 203define void @multi_gt() nounwind {204entry:205 %out0 = alloca i16, align 2206 %in1 = alloca i16, align 2207 store i16 0, ptr %out0, align 2208 store i16 1, ptr %in1, align 2209 %tmp = load i16, ptr %in1, align 2210 %0 = call i16 asm "foo $1,$0", "=r|r,r|>r"(i16 %tmp) nounwind211 store i16 %0, ptr %out0, align 2212 %tmp1 = load i16, ptr %in1, align 2213 %1 = call i16 asm "foo $1,$0", "=r|r,r|r>"(i16 %tmp1) nounwind214 store i16 %1, ptr %out0, align 2215 ret void216}217 218define void @multi_r() nounwind {219entry:220 %out0 = alloca i16, align 2221 %in1 = alloca i16, align 2222 store i16 0, ptr %out0, align 2223 store i16 1, ptr %in1, align 2224 %tmp = load i16, ptr %in1, align 2225 %0 = call i16 asm "foo $1,$0", "=r|r,r|m"(i16 %tmp) nounwind226 store i16 %0, ptr %out0, align 2227 ret void228}229 230define void @multi_i() nounwind {231entry:232 %out0 = alloca i16, align 2233 store i16 0, ptr %out0, align 2234 %0 = call i16 asm "foo $1,$0", "=r|r,r|i"(i16 1) nounwind235 store i16 %0, ptr %out0, align 2236 ret void237}238 239define void @multi_n() nounwind {240entry:241 %out0 = alloca i16, align 2242 store i16 0, ptr %out0, align 2243 %0 = call i16 asm "foo $1,$0", "=r|r,r|n"(i16 1) nounwind244 store i16 %0, ptr %out0, align 2245 ret void246}247 248define void @multi_E() nounwind {249entry:250 %out0 = alloca double, align 8251 store double 0.000000e+000, ptr %out0, align 8252; No lowering support.253; %0 = call double asm "foo $1,$0", "=r|r,r|E"(double 1.000000e+001) nounwind254; store double %0, double* %out0, align 8255 ret void256}257 258define void @multi_F() nounwind {259entry:260 %out0 = alloca double, align 8261 store double 0.000000e+000, ptr %out0, align 8262; No lowering support.263; %0 = call double asm "foo $1,$0", "=r|r,r|F"(double 1.000000e+000) nounwind264; store double %0, double* %out0, align 8265 ret void266}267 268define void @multi_s() nounwind {269entry:270 %out0 = alloca i16, align 2271 store i16 0, ptr %out0, align 2272 ret void273}274 275define void @multi_g() nounwind {276entry:277 %out0 = alloca i16, align 2278 %in1 = alloca i16, align 2279 store i16 0, ptr %out0, align 2280 store i16 1, ptr %in1, align 2281 %tmp = load i16, ptr %in1, align 2282 %0 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 %tmp) nounwind283 store i16 %0, ptr %out0, align 2284 %tmp1 = load i16, ptr @min1, align 2285 %1 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 %tmp1) nounwind286 store i16 %1, ptr %out0, align 2287 %2 = call i16 asm "foo $1,$0", "=r|r,r|imr"(i16 1) nounwind288 store i16 %2, ptr %out0, align 2289 ret void290}291 292define void @multi_X() nounwind {293entry:294 %out0 = alloca i16, align 2295 %in1 = alloca i16, align 2296 store i16 0, ptr %out0, align 2297 store i16 1, ptr %in1, align 2298 %tmp = load i16, ptr %in1, align 2299 %0 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 %tmp) nounwind300 store i16 %0, ptr %out0, align 2301 %tmp1 = load i16, ptr @min1, align 2302 %1 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 %tmp1) nounwind303 store i16 %1, ptr %out0, align 2304 %2 = call i16 asm "foo $1,$0", "=r|r,r|X"(i16 1) nounwind305 store i16 %2, ptr %out0, align 2306 %3 = call i16 asm "foo $1,$0", "=r|r,r|X"(ptr @marray) nounwind307 store i16 %3, ptr %out0, align 2308; No lowering support.309; %4 = call i16 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+001) nounwind310; store i16 %4, i16* %out0, align 2311; %5 = call i16 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+000) nounwind312; store i16 %5, i16* %out0, align 2313 ret void314}315 316define void @multi_p() nounwind {317entry:318 %out0 = alloca i16, align 2319 store i16 0, ptr %out0, align 2320 %0 = call i16 asm "foo $1,$0", "=r|r,r|r"(ptr @marray) nounwind321 store i16 %0, ptr %out0, align 2322 ret void323}324