322 lines · plain
1; RUN: llc -verify-machineinstrs < %s -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-v128:128:128-n32"4target triple = "powerpc--"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, ptr %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, ptr %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 %4 = call i32 asm "foo $1,$0", "=r,X"(double 1.000000e+001) nounwind151 store i32 %4, ptr %out0, align 4152 %5 = call i32 asm "foo $1,$0", "=r,X"(double 1.000000e+000) nounwind153 store i32 %5, ptr %out0, align 4154 ret void155}156 157define void @single_p() nounwind {158entry:159 %out0 = alloca i32, align 4160 store i32 0, ptr %out0, align 4161 %0 = call i32 asm "foo $1,$0", "=r,r"(ptr @marray) nounwind162 store i32 %0, ptr %out0, align 4163 ret void164}165 166define void @multi_m() nounwind {167entry:168 %tmp = load i32, ptr @min1, align 4169 call void asm "foo $1,$0", "=*m|r,m|r"(ptr elementtype(i32) @mout0, i32 %tmp) nounwind170 ret void171}172 173define void @multi_o() nounwind {174entry:175 %out0 = alloca i32, align 4176 %index = alloca i32, align 4177 store i32 0, ptr %out0, align 4178 store i32 1, ptr %index, align 4179 ret void180}181 182define void @multi_V() nounwind {183entry:184 ret void185}186 187define void @multi_lt() nounwind {188entry:189 %out0 = alloca i32, align 4190 %in1 = alloca i32, align 4191 store i32 0, ptr %out0, align 4192 store i32 1, ptr %in1, align 4193 %tmp = load i32, ptr %in1, align 4194 %0 = call i32 asm "foo $1,$0", "=r|r,r|<r"(i32 %tmp) nounwind195 store i32 %0, ptr %out0, align 4196 %tmp1 = load i32, ptr %in1, align 4197 %1 = call i32 asm "foo $1,$0", "=r|r,r|r<"(i32 %tmp1) nounwind198 store i32 %1, ptr %out0, align 4199 ret void200}201 202define void @multi_gt() nounwind {203entry:204 %out0 = alloca i32, align 4205 %in1 = alloca i32, align 4206 store i32 0, ptr %out0, align 4207 store i32 1, ptr %in1, align 4208 %tmp = load i32, ptr %in1, align 4209 %0 = call i32 asm "foo $1,$0", "=r|r,r|>r"(i32 %tmp) nounwind210 store i32 %0, ptr %out0, align 4211 %tmp1 = load i32, ptr %in1, align 4212 %1 = call i32 asm "foo $1,$0", "=r|r,r|r>"(i32 %tmp1) nounwind213 store i32 %1, ptr %out0, align 4214 ret void215}216 217define void @multi_r() nounwind {218entry:219 %out0 = alloca i32, align 4220 %in1 = alloca i32, align 4221 store i32 0, ptr %out0, align 4222 store i32 1, ptr %in1, align 4223 %tmp = load i32, ptr %in1, align 4224 %0 = call i32 asm "foo $1,$0", "=r|r,r|m"(i32 %tmp) nounwind225 store i32 %0, ptr %out0, align 4226 ret void227}228 229define void @multi_i() nounwind {230entry:231 %out0 = alloca i32, align 4232 store i32 0, ptr %out0, align 4233 %0 = call i32 asm "foo $1,$0", "=r|r,r|i"(i32 1) nounwind234 store i32 %0, ptr %out0, align 4235 ret void236}237 238define void @multi_n() nounwind {239entry:240 %out0 = alloca i32, align 4241 store i32 0, ptr %out0, align 4242 %0 = call i32 asm "foo $1,$0", "=r|r,r|n"(i32 1) nounwind243 store i32 %0, ptr %out0, align 4244 ret void245}246 247define void @multi_E() nounwind {248entry:249 %out0 = alloca double, align 8250 store double 0.000000e+000, ptr %out0, align 8251; No lowering support.252; %0 = call double asm "foo $1,$0", "=r|r,r|E"(double 1.000000e+001) nounwind253; store double %0, ptr %out0, align 8254 ret void255}256 257define void @multi_F() nounwind {258entry:259 %out0 = alloca double, align 8260 store double 0.000000e+000, ptr %out0, align 8261; No lowering support.262; %0 = call double asm "foo $1,$0", "=r|r,r|F"(double 1.000000e+000) nounwind263; store double %0, ptr %out0, align 8264 ret void265}266 267define void @multi_s() nounwind {268entry:269 %out0 = alloca i32, align 4270 store i32 0, ptr %out0, align 4271 ret void272}273 274define void @multi_g() nounwind {275entry:276 %out0 = alloca i32, align 4277 %in1 = alloca i32, align 4278 store i32 0, ptr %out0, align 4279 store i32 1, ptr %in1, align 4280 %tmp = load i32, ptr %in1, align 4281 %0 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 %tmp) nounwind282 store i32 %0, ptr %out0, align 4283 %tmp1 = load i32, ptr @min1, align 4284 %1 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 %tmp1) nounwind285 store i32 %1, ptr %out0, align 4286 %2 = call i32 asm "foo $1,$0", "=r|r,r|imr"(i32 1) nounwind287 store i32 %2, ptr %out0, align 4288 ret void289}290 291define void @multi_X() nounwind {292entry:293 %out0 = alloca i32, align 4294 %in1 = alloca i32, align 4295 store i32 0, ptr %out0, align 4296 store i32 1, ptr %in1, align 4297 %tmp = load i32, ptr %in1, align 4298 %0 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 %tmp) nounwind299 store i32 %0, ptr %out0, align 4300 %tmp1 = load i32, ptr @min1, align 4301 %1 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 %tmp1) nounwind302 store i32 %1, ptr %out0, align 4303 %2 = call i32 asm "foo $1,$0", "=r|r,r|X"(i32 1) nounwind304 store i32 %2, ptr %out0, align 4305 %3 = call i32 asm "foo $1,$0", "=r|r,r|X"(ptr @marray) nounwind306 store i32 %3, ptr %out0, align 4307 %4 = call i32 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+001) nounwind308 store i32 %4, ptr %out0, align 4309 %5 = call i32 asm "foo $1,$0", "=r|r,r|X"(double 1.000000e+000) nounwind310 store i32 %5, ptr %out0, align 4311 ret void312}313 314define void @multi_p() nounwind {315entry:316 %out0 = alloca i32, align 4317 store i32 0, ptr %out0, align 4318 %0 = call i32 asm "foo $1,$0", "=r|r,r|r"(ptr @marray) nounwind319 store i32 %0, ptr %out0, align 4320 ret void321}322