[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-blockaddress.mir
blobee54f388683696d54c81afbba8ba6ef290028dd3
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-unknown-unknown -o - -verify-machineinstrs -run-pass=instruction-select %s | FileCheck %s
3 # RUN: llc -mtriple=aarch64-unknown-unknown -o - -verify-machineinstrs -run-pass=instruction-select -code-model=large %s | FileCheck %s --check-prefix=LARGE
4 --- |
5   ; ModuleID = 'blockaddress.ll'
6   source_filename = "blockaddress.ll"
7   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
8   target triple = "aarch64-none-linux-gnu"
10   @addr = dso_local global i8* null
12   define dso_local void @test_blockaddress() {
13     store i8* blockaddress(@test_blockaddress, %block), i8** @addr
14     indirectbr i8* blockaddress(@test_blockaddress, %block), [label %block]
16   block:                                            ; preds = %0
17     ret void
18   }
20 ...
21 ---
22 name:            test_blockaddress
23 alignment:       4
24 legalized:       true
25 regBankSelected: true
26 tracksRegLiveness: true
27 registers:
28   - { id: 0, class: gpr }
29   - { id: 1, class: gpr }
30 body:             |
31   ; CHECK-LABEL: name: test_blockaddress
32   ; CHECK: bb.0 (%ir-block.0):
33   ; CHECK-NEXT:   [[MOVaddrBA:%[0-9]+]]:gpr64common = MOVaddrBA target-flags(aarch64-page) blockaddress(@test_blockaddress, %ir-block.block), target-flags(aarch64-pageoff, aarch64-nc) blockaddress(@test_blockaddress, %ir-block.block)
34   ; CHECK-NEXT:   [[MOVaddr:%[0-9]+]]:gpr64common = MOVaddr target-flags(aarch64-page) @addr, target-flags(aarch64-pageoff, aarch64-nc) @addr
35   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gpr64 = COPY [[MOVaddrBA]]
36   ; CHECK-NEXT:   STRXui [[COPY]], [[MOVaddr]], 0 :: (store (p0) into @addr)
37   ; CHECK-NEXT:   BR [[MOVaddrBA]]
38   ; CHECK-NEXT: {{  $}}
39   ; CHECK-NEXT: bb.1.block (ir-block-address-taken %ir-block.block):
40   ; LARGE-LABEL: name: test_blockaddress
41   ; LARGE: bb.0 (%ir-block.0):
42   ; LARGE-NEXT:   [[MOVZXi:%[0-9]+]]:gpr64 = MOVZXi target-flags(aarch64-g0, aarch64-nc) blockaddress(@test_blockaddress, %ir-block.block), 0
43   ; LARGE-NEXT:   [[MOVKXi:%[0-9]+]]:gpr64 = MOVKXi [[MOVZXi]], target-flags(aarch64-g1, aarch64-nc) blockaddress(@test_blockaddress, %ir-block.block), 16
44   ; LARGE-NEXT:   [[MOVKXi1:%[0-9]+]]:gpr64 = MOVKXi [[MOVKXi]], target-flags(aarch64-g2, aarch64-nc) blockaddress(@test_blockaddress, %ir-block.block), 32
45   ; LARGE-NEXT:   [[MOVKXi2:%[0-9]+]]:gpr64 = MOVKXi [[MOVKXi1]], target-flags(aarch64-g3) blockaddress(@test_blockaddress, %ir-block.block), 48
46   ; LARGE-NEXT:   [[MOVZXi1:%[0-9]+]]:gpr64 = MOVZXi target-flags(aarch64-g0, aarch64-nc) @addr, 0
47   ; LARGE-NEXT:   [[MOVKXi3:%[0-9]+]]:gpr64 = MOVKXi [[MOVZXi1]], target-flags(aarch64-g1, aarch64-nc) @addr, 16
48   ; LARGE-NEXT:   [[MOVKXi4:%[0-9]+]]:gpr64 = MOVKXi [[MOVKXi3]], target-flags(aarch64-g2, aarch64-nc) @addr, 32
49   ; LARGE-NEXT:   [[MOVKXi5:%[0-9]+]]:gpr64common = MOVKXi [[MOVKXi4]], target-flags(aarch64-g3) @addr, 48
50   ; LARGE-NEXT:   STRXui [[MOVKXi2]], [[MOVKXi5]], 0 :: (store (p0) into @addr)
51   ; LARGE-NEXT:   BR [[MOVKXi2]]
52   ; LARGE-NEXT: {{  $}}
53   ; LARGE-NEXT: bb.1.block (ir-block-address-taken %ir-block.block):
54   bb.1 (%ir-block.0):
55     %0:gpr(p0) = G_BLOCK_ADDR blockaddress(@test_blockaddress, %ir-block.block)
56     %1:gpr(p0) = G_GLOBAL_VALUE @addr
57     G_STORE %0(p0), %1(p0) :: (store (p0) into @addr)
58     G_BRINDIRECT %0(p0)
60   bb.2.block (ir-block-address-taken %ir-block.block):
61     RET_ReallyLR
63 ...