324 lines · plain
1; RUN: llc < %s -mtriple=sparc -no-integrated-as2; ModuleID = 'mult-alt-generic.c'3target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-n32"4target triple = "sparc"5 6@mout0 = common global i32 0, align 47@min1 = common global i32 0, align 48@marray = common global [2 x i32] zeroinitializer, align 49 10define void @single_m() nounwind {11entry:12 call void asm "foo $1,$0", "=*m,*m"(ptr elementtype(i32) @mout0, ptr elementtype(i32) @min1) nounwind13 ret void14}15 16define void @single_o() nounwind {17entry:18 %out0 = alloca i32, align 419 %index = alloca i32, align 420 store i32 0, ptr %out0, align 421 store i32 1, ptr %index, align 422 ret void23}24 25define void @single_V() nounwind {26entry:27 ret void28}29 30define void @single_lt() nounwind {31entry:32 %out0 = alloca i32, align 433 %in1 = alloca i32, align 434 store i32 0, ptr %out0, align 435 store i32 1, ptr %in1, align 436 %tmp = load i32, ptr %in1, align 437 %0 = call i32 asm "foo $1,$0", "=r,<r"(i32 %tmp) nounwind38 store i32 %0, ptr %out0, align 439 %tmp1 = load i32, ptr %in1, align 440 %1 = call i32 asm "foo $1,$0", "=r,r<"(i32 %tmp1) nounwind41 store i32 %1, ptr %out0, align 442 ret void43}44 45define void @single_gt() nounwind {46entry:47 %out0 = alloca i32, align 448 %in1 = alloca i32, align 449 store i32 0, ptr %out0, align 450 store i32 1, ptr %in1, align 451 %tmp = load i32, ptr %in1, align 452 %0 = call i32 asm "foo $1,$0", "=r,>r"(i32 %tmp) nounwind53 store i32 %0, ptr %out0, align 454 %tmp1 = load i32, ptr %in1, align 455 %1 = call i32 asm "foo $1,$0", "=r,r>"(i32 %tmp1) nounwind56 store i32 %1, ptr %out0, align 457 ret void58}59 60define void @single_r() nounwind {61entry:62 %out0 = alloca i32, align 463 %in1 = alloca i32, align 464 store i32 0, ptr %out0, align 465 store i32 1, ptr %in1, align 466 %tmp = load i32, ptr %in1, align 467 %0 = call i32 asm "foo $1,$0", "=r,r"(i32 %tmp) nounwind68 store i32 %0, ptr %out0, align 469 ret void70}71 72define void @single_i() nounwind {73entry:74 %out0 = alloca i32, align 475 store i32 0, ptr %out0, align 476 %0 = call i32 asm "foo $1,$0", "=r,i"(i32 1) nounwind77 store i32 %0, ptr %out0, align 478 ret void79}80 81define void @single_n() nounwind {82entry:83 %out0 = alloca i32, align 484 store i32 0, ptr %out0, align 485 %0 = call i32 asm "foo $1,$0", "=r,n"(i32 1) nounwind86 store i32 %0, ptr %out0, align 487 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 i32, align 4113 store i32 0, ptr %out0, align 4114 ret void115}116 117define void @single_g() nounwind {118entry:119 %out0 = alloca i32, align 4120 %in1 = alloca i32, align 4121 store i32 0, ptr %out0, align 4122 store i32 1, ptr %in1, align 4123 %tmp = load i32, ptr %in1, align 4124 %0 = call i32 asm "foo $1,$0", "=r,imr"(i32 %tmp) nounwind125 store i32 %0, ptr %out0, align 4126 %tmp1 = load i32, ptr @min1, align 4127 %1 = call i32 asm "foo $1,$0", "=r,imr"(i32 %tmp1) nounwind128 store i32 %1, ptr %out0, align 4129 %2 = call i32 asm "foo $1,$0", "=r,imr"(i32 1) nounwind130 store i32 %2, ptr %out0, align 4131 ret void132}133 134define void @single_X() nounwind {135entry:136 %out0 = alloca i32, align 4137 %in1 = alloca i32, align 4138 store i32 0, ptr %out0, align 4139 store i32 1, ptr %in1, align 4140 %tmp = load i32, ptr %in1, align 4141 %0 = call i32 asm "foo $1,$0", "=r,X"(i32 %tmp) nounwind142 store i32 %0, ptr %out0, align 4143 %tmp1 = load i32, ptr @min1, align 4144 %1 = call i32 asm "foo $1,$0", "=r,X"(i32 %tmp1) nounwind145 store i32 %1, ptr %out0, align 4146 %2 = call i32 asm "foo $1,$0", "=r,X"(i32 1) nounwind147 store i32 %2, ptr %out0, align 4148 %3 = call i32 asm "foo $1,$0", "=r,X"(ptr @marray) nounwind149 store i32 %3, ptr %out0, align 4150; No lowering support.151; %4 = call i32 asm "foo $1,$0", "=r,X"(double 1.000000e+001) nounwind152; store i32 %4, i32* %out0, align 4153; %5 = call i32 asm "foo $1,$0", "=r,X"(double 1.000000e+000) nounwind154; store i32 %5, i32* %out0, align 4155 ret void156}157 158define void @single_p() nounwind {159entry:160 %out0 = alloca i32, align 4161 store i32 0, ptr %out0, align 4162 %0 = call i32 asm "foo $1,$0", "=r,r"(ptr @marray) nounwind163 store i32 %0, ptr %out0, align 4164 ret void165}166 167define void @multi_m() nounwind {168entry:169 %tmp = load i32, ptr @min1, align 4170 call void asm "foo $1,$0", "=*m|r,m|r"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind171 ret void172}173 174define void @multi_o() nounwind {175entry:176 %out0 = alloca i32, align 4177 %index = alloca i32, align 4178 store i32 0, ptr %out0, align 4179 store i32 1, ptr %index, align 4180 ret void181}182 183define void @multi_V() nounwind {184entry:185 ret void186}187 188define void @multi_lt() nounwind {189entry:190 %out0 = alloca i32, align 4191 %in1 = alloca i32, align 4192 store i32 0, ptr %out0, align 4193 store i32 1, ptr %in1, align 4194 %tmp = load i32, ptr %in1, align 4195 %0 = call i32 asm "foo $1,$0", "=r|r,r|<r"(i32 %tmp) nounwind196 store i32 %0, ptr %out0, align 4197 %tmp1 = load i32, ptr %in1, align 4198 %1 = call i32 asm "foo $1,$0", "=r|r,r|r<"(i32 %tmp1) nounwind199 store i32 %1, ptr %out0, align 4200 ret void201}202 203define void @multi_gt() nounwind {204entry:205 %out0 = alloca i32, align 4206 %in1 = alloca i32, align 4207 store i32 0, ptr %out0, align 4208 store i32 1, ptr %in1, align 4209 %tmp = load i32, ptr %in1, align 4210 %0 = call i32 asm "foo $1,$0", "=r|r,r|>r"(i32 %tmp) nounwind211 store i32 %0, ptr %out0, align 4212 %tmp1 = load i32, ptr %in1, align 4213 %1 = call i32 asm "foo $1,$0", "=r|r,r|r>"(i32 %tmp1) nounwind214 store i32 %1, ptr %out0, align 4215 ret void216}217 218define void @multi_r() nounwind {219entry:220 %out0 = alloca i32, align 4221 %in1 = alloca i32, align 4222 store i32 0, ptr %out0, align 4223 store i32 1, ptr %in1, align 4224 %tmp = load i32, ptr %in1, align 4225 %0 = call i32 asm "foo $1,$0", "=r|r,r|m"(i32 %tmp) nounwind226 store i32 %0, ptr %out0, align 4227 ret void228}229 230define void @multi_i() nounwind {231entry:232 %out0 = alloca i32, align 4233 store i32 0, ptr %out0, align 4234 %0 = call i32 asm "foo $1,$0", "=r|r,r|i"(i32 1) nounwind235 store i32 %0, ptr %out0, align 4236 ret void237}238 239define void @multi_n() nounwind {240entry:241 %out0 = alloca i32, align 4242 store i32 0, ptr %out0, align 4243 %0 = call i32 asm "foo $1,$0", "=r|r,r|n"(i32 1) nounwind244 store i32 %0, ptr %out0, align 4245 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 i32, align 4271 store i32 0, ptr %out0, align 4272 ret void273}274 275define void @multi_g() nounwind {276entry:277 %out0 = alloca i32, align 4278 %in1 = alloca i32, align 4279 store i32 0, ptr %out0, align 4280 store i32 1, ptr %in1, align 4281 %tmp = load i32, ptr %in1, align 4282 %0 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 %tmp) nounwind283 store i32 %0, ptr %out0, align 4284 %tmp1 = load i32, ptr @min1, align 4285 %1 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 %tmp1) nounwind286 store i32 %1, ptr %out0, align 4287 %2 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 1) nounwind288 store i32 %2, ptr %out0, align 4289 ret void290}291 292define void @multi_X() nounwind {293entry:294 %out0 = alloca i32, align 4295 %in1 = alloca i32, align 4296 store i32 0, ptr %out0, align 4297 store i32 1, ptr %in1, align 4298 %tmp = load i32, ptr %in1, align 4299 %0 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 %tmp) nounwind300 store i32 %0, ptr %out0, align 4301 %tmp1 = load i32, ptr @min1, align 4302 %1 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 %tmp1) nounwind303 store i32 %1, ptr %out0, align 4304 %2 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 1) nounwind305 store i32 %2, ptr %out0, align 4306 %3 = call i32 asm "foo $1,$0", "=r|r,r|X"(ptr @marray) nounwind307 store i32 %3, ptr %out0, align 4308; No lowering support.309; %4 = call i32 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+001) nounwind310; store i32 %4, i32* %out0, align 4311; %5 = call i32 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+000) nounwind312; store i32 %5, i32* %out0, align 4313 ret void314}315 316define void @multi_p() nounwind {317entry:318 %out0 = alloca i32, align 4319 store i32 0, ptr %out0, align 4320 %0 = call i32 asm "foo $1,$0", "=r|r,r|r"(ptr @marray) nounwind321 store i32 %0, ptr %out0, align 4322 ret void323}324