233 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 32# RUN: llc -start-after=finalize-isel -regalloc=greedy -stop-after=greedy \3# RUN: -verify-machineinstrs -verify-regalloc %s -o - | FileCheck %s4--- |5 target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"6 target triple = "i386-unknown-linux-gnu"7 8 define void @input(i32 %0) #0 {9 call void asm "# $0", "rm,~{ax},~{cx},~{dx},~{si},~{di},~{bx},~{bp}"(i32 %0)10 ret void11 }12 13 define i32 @output() #0 {14 %1 = alloca i32, align 415 call void asm "# $0", "=*rm,~{ax},~{cx},~{dx},~{si},~{di},~{bx},~{bp}"(ptr nonnull elementtype(i32) %1)16 %2 = load i32, ptr %1, align 417 ret i32 %218 }19 20 define i32 @inout(i32 %0) #0 {21 %2 = alloca i32, align 422 store i32 %0, ptr %2, align 423 call void asm "# $0 $1", "=*rm,0,~{ax},~{cx},~{dx},~{si},~{di},~{bx},~{bp}"(ptr nonnull elementtype(i32) %2, i32 %0)24 %3 = load i32, ptr %2, align 425 ret i32 %326 }27 28 attributes #0 = { nounwind }29 30...31---32name: input33alignment: 1634exposesReturnsTwice: false35legalized: false36regBankSelected: false37selected: false38failedISel: false39tracksRegLiveness: true40hasWinCFI: false41callsEHReturn: false42callsUnwindInit: false43hasEHContTarget: false44hasEHScopes: false45hasEHFunclets: false46isOutlined: false47debugInstrRef: false48failsVerification: false49tracksDebugUserValues: false50registers:51 - { id: 0, class: gr32, preferred-register: '' }52liveins: []53frameInfo:54 isFrameAddressTaken: false55 isReturnAddressTaken: false56 hasStackMap: false57 hasPatchPoint: false58 stackSize: 059 offsetAdjustment: 060 maxAlignment: 461 adjustsStack: false62 hasCalls: false63 stackProtector: ''64 functionContext: ''65 maxCallFrameSize: 429496729566 cvBytesOfCalleeSavedRegisters: 067 hasOpaqueSPAdjustment: false68 hasVAStart: false69 hasMustTailInVarArgFunc: false70 hasTailCall: false71 localFrameSize: 072 savePoint: []73 restorePoint: []74fixedStack:75 - { id: 0, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,76 isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,77 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }78stack: []79entry_values: []80callSites: []81debugValueSubstitutions: []82constants: []83machineFunctionInfo: {}84body: |85 bb.0 (%ir-block.1):86 ; CHECK-LABEL: name: input87 ; CHECK: INLINEASM &"# $0", 8 /* mayload attdialect */, 262190 /* mem:m */, %fixed-stack.0, 1, $noreg, 0, $noreg, 12 /* clobber */, implicit-def dead early-clobber $ax, 12 /* clobber */, implicit-def dead early-clobber $cx, 12 /* clobber */, implicit-def dead early-clobber $dx, 12 /* clobber */, implicit-def dead early-clobber $si, 12 /* clobber */, implicit-def dead early-clobber $di, 12 /* clobber */, implicit-def dead early-clobber $bx, 12 /* clobber */, implicit-def dead early-clobber $bp :: (load (s32) from %fixed-stack.0, align 16)88 ; CHECK-NEXT: RET 089 %0:gr32 = MOV32rm %fixed-stack.0, 1, $noreg, 0, $noreg :: (load (s32) from %fixed-stack.0, align 16)90 INLINEASM &"# $0", 0 /* attdialect */, 1076101129 /* reguse:GR32 spillable */, %0, 12 /* clobber */, implicit-def early-clobber $ax, 12 /* clobber */, implicit-def early-clobber $cx, 12 /* clobber */, implicit-def early-clobber $dx, 12 /* clobber */, implicit-def early-clobber $si, 12 /* clobber */, implicit-def early-clobber $di, 12 /* clobber */, implicit-def early-clobber $bx, 12 /* clobber */, implicit-def early-clobber $bp91 RET 092 93...94---95name: output96alignment: 1697exposesReturnsTwice: false98legalized: false99regBankSelected: false100selected: false101failedISel: false102tracksRegLiveness: true103hasWinCFI: false104callsEHReturn: false105callsUnwindInit: false106hasEHContTarget: false107hasEHScopes: false108hasEHFunclets: false109isOutlined: false110debugInstrRef: false111failsVerification: false112tracksDebugUserValues: false113registers:114 - { id: 0, class: gr32, preferred-register: '' }115liveins: []116frameInfo:117 isFrameAddressTaken: false118 isReturnAddressTaken: false119 hasStackMap: false120 hasPatchPoint: false121 stackSize: 0122 offsetAdjustment: 0123 maxAlignment: 4124 adjustsStack: false125 hasCalls: false126 stackProtector: ''127 functionContext: ''128 maxCallFrameSize: 4294967295129 cvBytesOfCalleeSavedRegisters: 0130 hasOpaqueSPAdjustment: false131 hasVAStart: false132 hasMustTailInVarArgFunc: false133 hasTailCall: false134 localFrameSize: 0135 savePoint: []136 restorePoint: []137fixedStack: []138stack:139 - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4,140 stack-id: default, callee-saved-register: '', callee-saved-restored: true,141 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }142entry_values: []143callSites: []144debugValueSubstitutions: []145constants: []146machineFunctionInfo: {}147body: |148 bb.0 (%ir-block.0):149 ; CHECK-LABEL: name: output150 ; CHECK: INLINEASM &"# $0", 16 /* maystore attdialect */, 262190 /* mem:m */, %stack.1, 1, $noreg, 0, $noreg, 12 /* clobber */, implicit-def dead early-clobber $ax, 12 /* clobber */, implicit-def dead early-clobber $cx, 12 /* clobber */, implicit-def dead early-clobber $dx, 12 /* clobber */, implicit-def dead early-clobber $si, 12 /* clobber */, implicit-def dead early-clobber $di, 12 /* clobber */, implicit-def dead early-clobber $bx, 12 /* clobber */, implicit-def dead early-clobber $bp :: (store (s32) into %stack.1)151 ; CHECK-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm %stack.1, 1, $noreg, 0, $noreg :: (load (s32) from %stack.1)152 ; CHECK-NEXT: MOV32mr %stack.0, 1, $noreg, 0, $noreg, [[MOV32rm]] :: (store (s32) into %ir.1)153 ; CHECK-NEXT: $eax = COPY [[MOV32rm]]154 ; CHECK-NEXT: RET 0, $eax155 INLINEASM &"# $0", 0 /* attdialect */, 1076101130 /* regdef:GR32 spillable */, def %0, 12 /* clobber */, implicit-def early-clobber $ax, 12 /* clobber */, implicit-def early-clobber $cx, 12 /* clobber */, implicit-def early-clobber $dx, 12 /* clobber */, implicit-def early-clobber $si, 12 /* clobber */, implicit-def early-clobber $di, 12 /* clobber */, implicit-def early-clobber $bx, 12 /* clobber */, implicit-def early-clobber $bp156 MOV32mr %stack.0, 1, $noreg, 0, $noreg, %0 :: (store (s32) into %ir.1)157 $eax = COPY %0158 RET 0, $eax159 160...161---162name: inout163alignment: 16164exposesReturnsTwice: false165legalized: false166regBankSelected: false167selected: false168failedISel: false169tracksRegLiveness: true170hasWinCFI: false171callsEHReturn: false172callsUnwindInit: false173hasEHContTarget: false174hasEHScopes: false175hasEHFunclets: false176isOutlined: false177debugInstrRef: false178failsVerification: false179tracksDebugUserValues: false180registers:181 - { id: 0, class: gr32, preferred-register: '' }182 - { id: 1, class: gr32, preferred-register: '' }183liveins: []184frameInfo:185 isFrameAddressTaken: false186 isReturnAddressTaken: false187 hasStackMap: false188 hasPatchPoint: false189 stackSize: 0190 offsetAdjustment: 0191 maxAlignment: 4192 adjustsStack: false193 hasCalls: false194 stackProtector: ''195 functionContext: ''196 maxCallFrameSize: 4294967295197 cvBytesOfCalleeSavedRegisters: 0198 hasOpaqueSPAdjustment: false199 hasVAStart: false200 hasMustTailInVarArgFunc: false201 hasTailCall: false202 localFrameSize: 0203 savePoint: []204 restorePoint: []205fixedStack:206 - { id: 0, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,207 isImmutable: false, isAliased: false, callee-saved-register: '',208 callee-saved-restored: true, debug-info-variable: '', debug-info-expression: '',209 debug-info-location: '' }210stack: []211entry_values: []212callSites: []213debugValueSubstitutions: []214constants: []215machineFunctionInfo: {}216body: |217 bb.0 (%ir-block.1):218 ; CHECK-LABEL: name: inout219 ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm %fixed-stack.0, 1, $noreg, 0, $noreg :: (load (s32) from %fixed-stack.0, align 16)220 ; CHECK-NEXT: MOV32mr %stack.0, 1, $noreg, 0, $noreg, [[MOV32rm]] :: (store (s32) into %stack.0)221 ; CHECK-NEXT: INLINEASM &"# $0 $1", 24 /* mayload maystore attdialect */, 262190 /* mem:m */, %stack.0, 1, $noreg, 0, $noreg, 262190 /* mem:m */, %stack.0, 1, $noreg, 0, $noreg, 12 /* clobber */, implicit-def dead early-clobber $ax, 12 /* clobber */, implicit-def dead early-clobber $cx, 12 /* clobber */, implicit-def dead early-clobber $dx, 12 /* clobber */, implicit-def dead early-clobber $si, 12 /* clobber */, implicit-def dead early-clobber $di, 12 /* clobber */, implicit-def dead early-clobber $bx, 12 /* clobber */, implicit-def dead early-clobber $bp :: (load store (s32) on %stack.0)222 ; CHECK-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm %stack.0, 1, $noreg, 0, $noreg :: (load (s32) from %stack.0)223 ; CHECK-NEXT: MOV32mr %fixed-stack.0, 1, $noreg, 0, $noreg, [[MOV32rm1]] :: (store (s32) into %ir.2, align 16)224 ; CHECK-NEXT: $eax = COPY [[MOV32rm1]]225 ; CHECK-NEXT: RET 0, $eax226 %1:gr32 = MOV32rm %fixed-stack.0, 1, $noreg, 0, $noreg :: (load (s32) from %fixed-stack.0, align 16)227 INLINEASM &"# $0 $1", 0 /* attdialect */, 1076101130 /* regdef:GR32 spillable */, def %0, 2147483657 /* reguse tiedto:$0 */, %1(tied-def 3), 12 /* clobber */, implicit-def early-clobber $ax, 12 /* clobber */, implicit-def early-clobber $cx, 12 /* clobber */, implicit-def early-clobber $dx, 12 /* clobber */, implicit-def early-clobber $si, 12 /* clobber */, implicit-def early-clobber $di, 12 /* clobber */, implicit-def early-clobber $bx, 12 /* clobber */, implicit-def early-clobber $bp228 MOV32mr %fixed-stack.0, 1, $noreg, 0, $noreg, %0 :: (store (s32) into %ir.2, align 16)229 $eax = COPY %0230 RET 0, $eax231 232...233