diff options
Diffstat (limited to 'llvm/test/CodeGen')
6 files changed, 257 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/MIR/X86/block-address-operands.mir b/llvm/test/CodeGen/MIR/X86/block-address-operands.mir new file mode 100644 index 00000000000..a0b17b00d2f --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/block-address-operands.mir @@ -0,0 +1,89 @@ +# RUN: llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s | FileCheck %s +# This test ensures that the MIR parser parses the block address operands +# correctly. + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %block), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %block] + + block: + ret void + } + + define void @test2() { + entry: + store volatile i8* blockaddress(@test2, %"quoted block"), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %"quoted block"] + + "quoted block": + ret void + } + + define void @test3() { + entry: + store volatile i8* blockaddress(@test3, %0), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %0] + + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1.block' ] + instructions: + # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block.block), _ + - '%rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block.block), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + name: block + addressTaken: true + instructions: + - RETQ +... +--- +name: test2 +tracksRegLiveness: true +body: + - id: 0 + name: entry + successors: [ '%bb.1' ] + instructions: + # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test2, %ir-block."quoted block"), _ + - '%rax = LEA64r %rip, 1, _, blockaddress(@test2, %ir-block."quoted block"), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + addressTaken: true + instructions: + - RETQ +... +--- +name: test3 +tracksRegLiveness: true +body: + - id: 0 + name: entry + successors: [ '%bb.1' ] + instructions: + # CHECK: %rax = LEA64r %rip, 1, _, blockaddress(@test3, %ir-block.0), _ + - '%rax = LEA64r %rip, 1, _, blockaddress(@test3, %ir-block.0), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + addressTaken: true + instructions: + - RETQ +... diff --git a/llvm/test/CodeGen/MIR/X86/expected-block-reference-in-blockaddress.mir b/llvm/test/CodeGen/MIR/X86/expected-block-reference-in-blockaddress.mir new file mode 100644 index 00000000000..2d4f5fac60b --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/expected-block-reference-in-blockaddress.mir @@ -0,0 +1,34 @@ +# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %block), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %block] + + block: + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1.block' ] + instructions: + # CHECK: [[@LINE+1]]:56: expected an IR block reference + - '%rax = LEA64r %rip, 1, _, blockaddress(@test, _), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + name: block + addressTaken: true + instructions: + - RETQ +... diff --git a/llvm/test/CodeGen/MIR/X86/expected-function-reference-after-blockaddress.mir b/llvm/test/CodeGen/MIR/X86/expected-function-reference-after-blockaddress.mir new file mode 100644 index 00000000000..0b8fe36c025 --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/expected-function-reference-after-blockaddress.mir @@ -0,0 +1,34 @@ +# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %block), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %block] + + block: + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1.block' ] + instructions: + # CHECK: [[@LINE+1]]:49: expected an IR function reference + - '%rax = LEA64r %rip, 1, _, blockaddress(@addr, %ir-block.block), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + name: block + addressTaken: true + instructions: + - RETQ +... diff --git a/llvm/test/CodeGen/MIR/X86/expected-global-value-after-blockaddress.mir b/llvm/test/CodeGen/MIR/X86/expected-global-value-after-blockaddress.mir new file mode 100644 index 00000000000..a42a26cb07c --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/expected-global-value-after-blockaddress.mir @@ -0,0 +1,34 @@ +# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %block), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %block] + + block: + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1.block' ] + instructions: + # CHECK: [[@LINE+1]]:49: expected a global value + - '%rax = LEA64r %rip, 1, _, blockaddress(0, %ir-block.block), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + name: block + addressTaken: true + instructions: + - RETQ +... diff --git a/llvm/test/CodeGen/MIR/X86/undefined-ir-block-in-blockaddress.mir b/llvm/test/CodeGen/MIR/X86/undefined-ir-block-in-blockaddress.mir new file mode 100644 index 00000000000..fc43df37303 --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/undefined-ir-block-in-blockaddress.mir @@ -0,0 +1,34 @@ +# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %block), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %block] + + block: + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1.block' ] + instructions: + # CHECK: [[@LINE+1]]:56: use of undefined IR block '%ir-block."block "' + - '%rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block."block "), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + name: block + addressTaken: true + instructions: + - RETQ +... diff --git a/llvm/test/CodeGen/MIR/X86/undefined-ir-block-slot-in-blockaddress.mir b/llvm/test/CodeGen/MIR/X86/undefined-ir-block-slot-in-blockaddress.mir new file mode 100644 index 00000000000..189b0f15ccc --- /dev/null +++ b/llvm/test/CodeGen/MIR/X86/undefined-ir-block-slot-in-blockaddress.mir @@ -0,0 +1,32 @@ +# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s + +--- | + + @addr = global i8* null + + define void @test() { + entry: + store volatile i8* blockaddress(@test, %0), i8** @addr + %val = load volatile i8*, i8** @addr + indirectbr i8* %val, [label %0] + + ret void + } + +... +--- +name: test +body: + - id: 0 + name: entry + successors: [ '%bb.1' ] + instructions: + # CHECK: [[@LINE+1]]:56: use of undefined IR block '%ir-block.1' + - '%rax = LEA64r %rip, 1, _, blockaddress(@test, %ir-block.1), _' + - 'MOV64mr %rip, 1, _, @addr, _, killed %rax' + - 'JMP64m %rip, 1, _, @addr, _' + - id: 1 + addressTaken: true + instructions: + - RETQ +... |