122 lines · plain
1# RUN: llc -mtriple=x86_64 -run-pass none -o - %s | FileCheck %s2# This test ensures that the MIR parser parses the block address operands3# correctly.4 5--- |6 7 @addr = global ptr null8 9 define void @test() {10 entry:11 store volatile ptr blockaddress(@test, %block), ptr @addr12 %val = load volatile ptr, ptr @addr13 indirectbr ptr %val, [label %block]14 15 block:16 ret void17 }18 19 define void @test2() {20 entry:21 store volatile ptr blockaddress(@test2, %"quoted block"), ptr @addr22 %val = load volatile ptr, ptr @addr23 indirectbr ptr %val, [label %"quoted block"]24 25 "quoted block":26 ret void27 }28 29 define void @slot_in_other_function(ptr %addr) {30 entry:31 store volatile ptr blockaddress(@test3, %0), ptr %addr32 ret void33 }34 35 define void @test3() {36 entry:37 store volatile ptr blockaddress(@test3, %0), ptr @addr38 %val = load volatile ptr, ptr @addr39 indirectbr ptr %val, [label %0]40 41 ret void42 }43 44 define void @test4() {45 entry:46 store volatile ptr blockaddress(@test4, %block), ptr @addr47 %val = load volatile ptr, ptr @addr48 indirectbr ptr %val, [label %block]49 50 block:51 ret void52 }53 54...55---56name: test57body: |58 bb.0.entry:59 successors: %bb.1.block60 ; CHECK: $rax = LEA64r $rip, 1, $noreg, blockaddress(@test, %ir-block.block), $noreg61 $rax = LEA64r $rip, 1, _, blockaddress(@test, %ir-block.block), _62 MOV64mr $rip, 1, _, @addr, _, killed $rax63 JMP64m $rip, 1, _, @addr, _64 65 bb.1.block (ir-block-address-taken %ir-block.block):66 RET6467...68---69name: test270tracksRegLiveness: true71body: |72 bb.0.entry:73 successors: %bb.174 ; CHECK: $rax = LEA64r $rip, 1, $noreg, blockaddress(@test2, %ir-block."quoted block"), $noreg75 $rax = LEA64r $rip, 1, _, blockaddress(@test2, %ir-block."quoted block"), _76 MOV64mr $rip, 1, _, @addr, _, killed $rax77 JMP64m $rip, 1, _, @addr, _78 79 bb.1 (%ir-block."quoted block", ir-block-address-taken %ir-block."quoted block"):80 RET6481...82---83name: slot_in_other_function84tracksRegLiveness: true85body: |86 bb.0.entry:87 liveins: $rdi88 ; CHECK-LABEL: name: slot_in_other_function89 ; CHECK: $rax = LEA64r $rip, 1, $noreg, blockaddress(@test3, %ir-block.0), $noreg90 $rax = LEA64r $rip, 1, _, blockaddress(@test3, %ir-block.0), _91 MOV64mr killed $rdi, 1, _, 0, _, killed $rax92 RET6493...94---95name: test396tracksRegLiveness: true97body: |98 bb.0.entry:99 successors: %bb.1100 ; CHECK-LABEL: name: test3101 ; CHECK: $rax = LEA64r $rip, 1, $noreg, blockaddress(@test3, %ir-block.0), $noreg102 $rax = LEA64r $rip, 1, _, blockaddress(@test3, %ir-block.0), _103 MOV64mr $rip, 1, _, @addr, _, killed $rax104 JMP64m $rip, 1, _, @addr, _105 106 bb.1 (%ir-block.0, ir-block-address-taken %ir-block.0):107 RET64108...109---110name: test4111body: |112 bb.0.entry:113 successors: %bb.1.block114 ; CHECK: $rax = LEA64r $rip, 1, $noreg, blockaddress(@test, %ir-block.block) + 2, $noreg115 $rax = LEA64r $rip, 1, _, blockaddress(@test, %ir-block.block) + 2, _116 MOV64mr $rip, 1, _, @addr, _, killed $rax117 JMP64m $rip, 1, _, @addr, _118 119 bb.1.block (ir-block-address-taken %ir-block.block):120 RET64121...122