# RUN: llc -run-pass none -o - %s | FileCheck %s # This test ensures that the MIR parser parses machine frame info properties # correctly. --- | define i32 @test(i32 %a) { entry: %b = alloca i32 store i32 %a, ptr %b %c = load i32, ptr %b ret i32 %c } define i32 @test2(i32 %a) { entry: %b = alloca i32 store i32 %a, ptr %b %c = load i32, ptr %b ret i32 %c } define void @test_framePointerPolicy_none() { ret void } define void @test_framePointerPolicy_non_leaf() { ret void } define void @test_framePointerPolicy_all() { ret void } define void @test_framePointerPolicy_reserved() { ret void } define void @test_framePointerPolicy_non_leaf_no_reserve() { ret void } ... --- name: test tracksRegLiveness: true # CHECK: frameInfo: # CHECK-NEXT: isFrameAddressTaken: false # CHECK-NEXT: isReturnAddressTaken: false # CHECK-NEXT: hasStackMap: false # CHECK-NEXT: hasPatchPoint: false # CHECK-NEXT: stackSize: 0 # CHECK-NEXT: offsetAdjustment: 0 # Note: max alignment can be target specific when printed. # CHECK-NEXT: maxAlignment: # CHECK-NEXT: adjustsStack: false # CHECK-NEXT: hasCalls: false # CHECK-NEXT: framePointerPolicy: none # CHECK-NEXT: stackProtector: '' # CHECK-NEXT: functionContext: '' # CHECK-NEXT: maxCallFrameSize: # CHECK-NEXT: cvBytesOfCalleeSavedRegisters: 0 # CHECK-NEXT: hasOpaqueSPAdjustment: false # CHECK-NEXT: hasVAStart: false # CHECK-NEXT: hasMustTailInVarArgFunc: false # CHECK-NEXT: hasTailCall: false # CHECK-NEXT: isCalleeSavedInfoValid: false # CHECK-NEXT: localFrameSize: 0 # CHECK: body frameInfo: maxAlignment: 4 body: | bb.0.entry: ... --- name: test2 tracksRegLiveness: true stack: - { id: 0, offset: -40, size: 8, alignment: 8 } # CHECK: test2 # CHECK: frameInfo: # CHECK-NEXT: isFrameAddressTaken: true # CHECK-NEXT: isReturnAddressTaken: true # CHECK-NEXT: hasStackMap: true # CHECK-NEXT: hasPatchPoint: true # CHECK-NEXT: stackSize: 4 # CHECK-NEXT: offsetAdjustment: 4 # Note: max alignment can be target specific when printed. # CHECK-NEXT: maxAlignment: # CHECK-NEXT: adjustsStack: true # CHECK-NEXT: hasCalls: true # CHECK-NEXT: framePointerPolicy: none # CHECK-NEXT: stackProtector: '' # CHECK-NEXT: functionContext: '%stack.0' # CHECK-NEXT: maxCallFrameSize: 4 # CHECK-NEXT: cvBytesOfCalleeSavedRegisters: 8 # CHECK-NEXT: hasOpaqueSPAdjustment: true # CHECK-NEXT: hasVAStart: true # CHECK-NEXT: hasMustTailInVarArgFunc: true # CHECK-NEXT: hasTailCall: true # CHECK: body frameInfo: isFrameAddressTaken: true isReturnAddressTaken: true hasStackMap: true hasPatchPoint: true stackSize: 4 offsetAdjustment: 4 maxAlignment: 4 adjustsStack: true hasCalls: true functionContext: '%stack.0' maxCallFrameSize: 4 cvBytesOfCalleeSavedRegisters: 8 hasOpaqueSPAdjustment: true hasVAStart: true hasTailCall: true hasMustTailInVarArgFunc: true localFrameSize: 256 body: | bb.0.entry: ... --- name: test_framePointerPolicy_none # CHECK: test_framePointerPolicy_none # CHECK: framePointerPolicy: none frameInfo: framePointerPolicy: none ... --- name: test_framePointerPolicy_non_leaf # CHECK: test_framePointerPolicy_non_leaf # CHECK: framePointerPolicy: non-leaf frameInfo: framePointerPolicy: non-leaf ... --- name: test_framePointerPolicy_all # CHECK: test_framePointerPolicy_all # CHECK: framePointerPolicy: all frameInfo: framePointerPolicy: all ... --- name: test_framePointerPolicy_reserved # CHECK: test_framePointerPolicy_reserved # CHECK: framePointerPolicy: reserved frameInfo: framePointerPolicy: reserved ... --- name: test_framePointerPolicy_non_leaf_no_reserve # CHECK: test_framePointerPolicy_non_leaf_no_reserve # CHECK: framePointerPolicy: non-leaf-no-reserve frameInfo: framePointerPolicy: non-leaf-no-reserve ...