brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 64d4d00 Raw
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