372 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s | FileCheck %s3; RUN: llc -early-live-intervals < %s | FileCheck %s4target triple = "thumbv6m-unknown-unknown-eabi"5 6define void @vla_emergency_spill(i32 %n) {7; CHECK-LABEL: vla_emergency_spill:8; CHECK: @ %bb.0: @ %entry9; CHECK-NEXT: .save {r4, r5, r6, r7, lr}10; CHECK-NEXT: push {r4, r5, r6, r7, lr}11; CHECK-NEXT: .setfp r7, sp, #1212; CHECK-NEXT: add r7, sp, #1213; CHECK-NEXT: ldr r6, .LCPI0_014; CHECK-NEXT: .pad #410015; CHECK-NEXT: add sp, r616; CHECK-NEXT: mov r6, sp17; CHECK-NEXT: adds r0, r0, #718; CHECK-NEXT: movs r1, #719; CHECK-NEXT: bics r0, r120; CHECK-NEXT: mov r1, sp21; CHECK-NEXT: subs r0, r1, r022; CHECK-NEXT: mov sp, r023; CHECK-NEXT: adds r1, r6, #424; CHECK-NEXT: @APP25; CHECK-NEXT: @NO_APP26; CHECK-NEXT: str r0, [r6]27; CHECK-NEXT: ldr r0, .LCPI0_128; CHECK-NEXT: str r5, [r0, r6]29; CHECK-NEXT: ldr r0, [r6]30; CHECK-NEXT: @APP31; CHECK-NEXT: @NO_APP32; CHECK-NEXT: subs r6, r7, #733; CHECK-NEXT: subs r6, #534; CHECK-NEXT: mov sp, r635; CHECK-NEXT: pop {r4, r5, r6, r7, pc}36; CHECK-NEXT: .p2align 237; CHECK-NEXT: @ %bb.1:38; CHECK-NEXT: .LCPI0_0:39; CHECK-NEXT: .long 4294963196 @ 0xffffeffc40; CHECK-NEXT: .LCPI0_1:41; CHECK-NEXT: .long 1024 @ 0x40042entry:43 %x = alloca [1024 x i32], align 444 %vla = alloca i8, i32 %n, align 145 %asm1 = call { i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},0,1,2,3,4,5"(ptr %vla, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef)46 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 047 %asmresult1 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 148 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 249 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 350 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 451 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32 } %asm1, 552 %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 25553 store i32 %asmresult5, ptr %arrayidx, align 454 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5}"(i32 %asmresult, i32 %asmresult1, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5) #255 ret void56}57 58define void @simple_emergency_spill(i32 %n) {59; CHECK-LABEL: simple_emergency_spill:60; CHECK: @ %bb.0: @ %entry61; CHECK-NEXT: .save {r4, r5, r6, r7, lr}62; CHECK-NEXT: push {r4, r5, r6, r7, lr}63; CHECK-NEXT: ldr r7, .LCPI1_064; CHECK-NEXT: .pad #819665; CHECK-NEXT: add sp, r766; CHECK-NEXT: add r0, sp, #467; CHECK-NEXT: ldr r1, .LCPI1_368; CHECK-NEXT: add r1, sp69; CHECK-NEXT: @APP70; CHECK-NEXT: @NO_APP71; CHECK-NEXT: str r0, [sp]72; CHECK-NEXT: ldr r0, .LCPI1_273; CHECK-NEXT: add r0, sp74; CHECK-NEXT: str r5, [r0]75; CHECK-NEXT: ldr r0, [sp]76; CHECK-NEXT: @APP77; CHECK-NEXT: @NO_APP78; CHECK-NEXT: ldr r7, .LCPI1_179; CHECK-NEXT: add sp, r780; CHECK-NEXT: pop {r4, r5, r6, r7, pc}81; CHECK-NEXT: .p2align 282; CHECK-NEXT: @ %bb.1:83; CHECK-NEXT: .LCPI1_0:84; CHECK-NEXT: .long 4294959100 @ 0xffffdffc85; CHECK-NEXT: .LCPI1_1:86; CHECK-NEXT: .long 8196 @ 0x200487; CHECK-NEXT: .LCPI1_2:88; CHECK-NEXT: .long 5120 @ 0x140089; CHECK-NEXT: .LCPI1_3:90; CHECK-NEXT: .long 4100 @ 0x100491entry:92 %x = alloca [1024 x i32], align 493 %y = alloca [1024 x i32], align 494 %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %y, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)95 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 096 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 197 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 298 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 399 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 4100 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5101 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6102 %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7103 %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 255104 store i32 %asmresult6, ptr %arrayidx, align 4105 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)106 ret void107}108 109; We have some logic to try to spill registers instead of allocating an110; emergency spill slot, but for targets where the stack alignment is 8,111; it only triggers when there are two available registers. (This is112; maybe worth looking into, to improve the generated code quality.)113;114; The scavenger itself only cares whether a register is allocatable, not115; whether it was actually spilled in the prologue, and r7 is first on116; the priority list, so we use it anyway. This is likely to confuse117; debuggers, so maybe worth changing at some point.118define void @simple_emergency_spill_nor7(i32 %n) {119; CHECK-LABEL: simple_emergency_spill_nor7:120; CHECK: @ %bb.0: @ %entry121; CHECK-NEXT: .save {r4, r5, r6, lr}122; CHECK-NEXT: push {r4, r5, r6, lr}123; CHECK-NEXT: ldr r6, .LCPI2_0124; CHECK-NEXT: .pad #8196125; CHECK-NEXT: add sp, r6126; CHECK-NEXT: add r0, sp, #4127; CHECK-NEXT: ldr r1, .LCPI2_3128; CHECK-NEXT: add r1, sp129; CHECK-NEXT: @APP130; CHECK-NEXT: @NO_APP131; CHECK-NEXT: str r7, [sp]132; CHECK-NEXT: ldr r7, .LCPI2_2133; CHECK-NEXT: add r7, sp134; CHECK-NEXT: str r5, [r7]135; CHECK-NEXT: ldr r7, [sp]136; CHECK-NEXT: @APP137; CHECK-NEXT: @NO_APP138; CHECK-NEXT: ldr r6, .LCPI2_1139; CHECK-NEXT: add sp, r6140; CHECK-NEXT: pop {r4, r5, r6, pc}141; CHECK-NEXT: .p2align 2142; CHECK-NEXT: @ %bb.1:143; CHECK-NEXT: .LCPI2_0:144; CHECK-NEXT: .long 4294959100 @ 0xffffdffc145; CHECK-NEXT: .LCPI2_1:146; CHECK-NEXT: .long 8196 @ 0x2004147; CHECK-NEXT: .LCPI2_2:148; CHECK-NEXT: .long 5120 @ 0x1400149; CHECK-NEXT: .LCPI2_3:150; CHECK-NEXT: .long 4100 @ 0x1004151entry:152 %x = alloca [1024 x i32], align 4153 %y = alloca [1024 x i32], align 4154 %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %x, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)155 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0156 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1157 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2158 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 3159 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4160 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5161 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6162 %arrayidx = getelementptr inbounds [1024 x i32], ptr %x, i32 0, i32 255163 store i32 %asmresult6, ptr %arrayidx, align 4164 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)165 ret void166}167 168define void @arg_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([252 x i32]) %p) {169; CHECK-LABEL: arg_emergency_spill:170; CHECK: @ %bb.0: @ %entry171; CHECK-NEXT: .save {r4, r5, r6, r7, lr}172; CHECK-NEXT: push {r4, r5, r6, r7, lr}173; CHECK-NEXT: .pad #4174; CHECK-NEXT: sub sp, #4175; CHECK-NEXT: add r0, sp, #24176; CHECK-NEXT: @APP177; CHECK-NEXT: @NO_APP178; CHECK-NEXT: str r0, [sp]179; CHECK-NEXT: add r0, sp, #904180; CHECK-NEXT: str r5, [r0, #124]181; CHECK-NEXT: ldr r0, [sp]182; CHECK-NEXT: @APP183; CHECK-NEXT: @NO_APP184; CHECK-NEXT: add sp, #4185; CHECK-NEXT: pop {r4, r5, r6, r7, pc}186entry:187 %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)188 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 0189 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 1190 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 2191 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 3192 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 4193 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5194 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6195 %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7196 %arrayidx = getelementptr inbounds i32, ptr %p, i32 251197 store i32 %asmresult6, ptr %arrayidx, align 4198 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)199 ret void200}201 202; We currently overestimate the amount of required stack space by 16 bytes,203; so this is the largest stack that doesn't require an emergency spill slot.204define void @arg_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([248 x i32]) %p) {205; CHECK-LABEL: arg_no_emergency_spill:206; CHECK: @ %bb.0: @ %entry207; CHECK-NEXT: .save {r4, r5, r6, r7, lr}208; CHECK-NEXT: push {r4, r5, r6, r7, lr}209; CHECK-NEXT: add r0, sp, #20210; CHECK-NEXT: @APP211; CHECK-NEXT: @NO_APP212; CHECK-NEXT: str r5, [sp, #1008]213; CHECK-NEXT: @APP214; CHECK-NEXT: @NO_APP215; CHECK-NEXT: pop {r4, r5, r6, r7, pc}216entry:217 %asm1 = call { i32, i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},={r7},0,1,2,3,4,5,6,7"(ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef)218 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 0219 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 1220 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 2221 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 3222 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 4223 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 5224 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 6225 %asmresult8 = extractvalue { i32, i32, i32, i32, i32, i32, i32, i32 } %asm1, 7226 %arrayidx = getelementptr inbounds i32, ptr %p, i32 247227 store i32 %asmresult6, ptr %arrayidx, align 4228 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6},{r7}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7, i32 %asmresult8)229 ret void230}231 232define void @aligned_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([31 x i32]) %p) {233; CHECK-LABEL: aligned_emergency_spill:234; CHECK: @ %bb.0: @ %entry235; CHECK-NEXT: .save {r4, r5, r6, r7, lr}236; CHECK-NEXT: push {r4, r5, r6, r7, lr}237; CHECK-NEXT: .setfp r7, sp, #12238; CHECK-NEXT: add r7, sp, #12239; CHECK-NEXT: .pad #44240; CHECK-NEXT: sub sp, #44241; CHECK-NEXT: mov r4, sp242; CHECK-NEXT: lsrs r4, r4, #4243; CHECK-NEXT: lsls r4, r4, #4244; CHECK-NEXT: mov sp, r4245; CHECK-NEXT: add r0, sp, #16246; CHECK-NEXT: adds r1, r7, #7247; CHECK-NEXT: adds r1, #1248; CHECK-NEXT: @APP249; CHECK-NEXT: @NO_APP250; CHECK-NEXT: str r0, [sp]251; CHECK-NEXT: ldr r0, .LCPI5_0252; CHECK-NEXT: str r5, [r0, r7]253; CHECK-NEXT: ldr r0, [sp]254; CHECK-NEXT: @APP255; CHECK-NEXT: @NO_APP256; CHECK-NEXT: subs r6, r7, #7257; CHECK-NEXT: subs r6, #5258; CHECK-NEXT: mov sp, r6259; CHECK-NEXT: pop {r4, r5, r6, r7, pc}260; CHECK-NEXT: .p2align 2261; CHECK-NEXT: @ %bb.1:262; CHECK-NEXT: .LCPI5_0:263; CHECK-NEXT: .long 128 @ 0x80264entry:265 %y = alloca [4 x i32], align 16266 %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3267 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0268 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1269 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2270 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 3271 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4272 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5273 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6274 %arrayidx = getelementptr inbounds i32, ptr %p, i32 30275 store i32 %asmresult6, ptr %arrayidx, align 4276 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)277 ret void278}279 280; This function should have no emergency spill slot, so its stack should be281; smaller than @aligned_emergency_spill.282define void @aligned_no_emergency_spill(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([30 x i32]) %p) {283; CHECK-LABEL: aligned_no_emergency_spill:284; CHECK: @ %bb.0: @ %entry285; CHECK-NEXT: .save {r4, r5, r6, r7, lr}286; CHECK-NEXT: push {r4, r5, r6, r7, lr}287; CHECK-NEXT: .setfp r7, sp, #12288; CHECK-NEXT: add r7, sp, #12289; CHECK-NEXT: .pad #28290; CHECK-NEXT: sub sp, #28291; CHECK-NEXT: mov r4, sp292; CHECK-NEXT: lsrs r4, r4, #4293; CHECK-NEXT: lsls r4, r4, #4294; CHECK-NEXT: mov sp, r4295; CHECK-NEXT: mov r0, sp296; CHECK-NEXT: adds r1, r7, #7297; CHECK-NEXT: adds r1, #1298; CHECK-NEXT: @APP299; CHECK-NEXT: @NO_APP300; CHECK-NEXT: str r5, [r7, #124]301; CHECK-NEXT: @APP302; CHECK-NEXT: @NO_APP303; CHECK-NEXT: subs r6, r7, #7304; CHECK-NEXT: subs r6, #5305; CHECK-NEXT: mov sp, r6306; CHECK-NEXT: pop {r4, r5, r6, r7, pc}307entry:308 %y = alloca [4 x i32], align 16309 %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3310 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0311 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1312 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2313 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 3314 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4315 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5316 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6317 %arrayidx = getelementptr inbounds i32, ptr %p, i32 29318 store i32 %asmresult6, ptr %arrayidx, align 4319 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)320 ret void321}322 323; This function shouldn't fail to compile. (It's UB, so it doesn't really324; matter what it compiles to, exactly, but we need to check at some point325; so we don't generate code that requires an emergency spill slot we never326; allocated. If the store gets eliminated, this testcase probably needs327; to be rewritten.)328define void @aligned_out_of_range_access(i32 %n, i32 %n2, i32 %n3, i32 %n4, ptr byval([30 x i32]) %p) {329; CHECK-LABEL: aligned_out_of_range_access:330; CHECK: @ %bb.0: @ %entry331; CHECK-NEXT: .save {r4, r5, r6, r7, lr}332; CHECK-NEXT: push {r4, r5, r6, r7, lr}333; CHECK-NEXT: .setfp r7, sp, #12334; CHECK-NEXT: add r7, sp, #12335; CHECK-NEXT: .pad #44336; CHECK-NEXT: sub sp, #44337; CHECK-NEXT: mov r4, sp338; CHECK-NEXT: lsrs r4, r4, #4339; CHECK-NEXT: lsls r4, r4, #4340; CHECK-NEXT: mov sp, r4341; CHECK-NEXT: add r0, sp, #16342; CHECK-NEXT: adds r1, r7, #7343; CHECK-NEXT: adds r1, #1344; CHECK-NEXT: str r1, [sp, #12] @ 4-byte Spill345; CHECK-NEXT: @APP346; CHECK-NEXT: @NO_APP347; CHECK-NEXT: str r0, [sp, #8] @ 4-byte Spill348; CHECK-NEXT: ldr r0, [sp, #12] @ 4-byte Reload349; CHECK-NEXT: str r5, [r0, #120]350; CHECK-NEXT: ldr r0, [sp, #8] @ 4-byte Reload351; CHECK-NEXT: @APP352; CHECK-NEXT: @NO_APP353; CHECK-NEXT: subs r6, r7, #7354; CHECK-NEXT: subs r6, #5355; CHECK-NEXT: mov sp, r6356; CHECK-NEXT: pop {r4, r5, r6, r7, pc}357entry:358 %y = alloca [4 x i32], align 16359 %asm1 = call { i32, i32, i32, i32, i32, i32, i32 } asm "", "={r0},={r1},={r2},={r3},={r4},={r5},={r6},0,1,2,3,4,5,6"(ptr %y, ptr %p, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef) #3360 %asmresult = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 0361 %asmresult2 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 1362 %asmresult3 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 2363 %asmresult4 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 3364 %asmresult5 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 4365 %asmresult6 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 5366 %asmresult7 = extractvalue { i32, i32, i32, i32, i32, i32, i32 } %asm1, 6367 %arrayidx = getelementptr inbounds i32, ptr %p, i32 30368 store i32 %asmresult6, ptr %arrayidx, align 4369 call void asm sideeffect "", "{r0},{r1},{r2},{r3},{r4},{r5},{r6}"(i32 %asmresult, i32 %asmresult2, i32 %asmresult3, i32 %asmresult4, i32 %asmresult5, i32 %asmresult6, i32 %asmresult7)370 ret void371}372