1# RUN: llc -O0 -mtriple thumb-linux -relocation-model=pic -mattr=+v6t2,+no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,ELF 2# RUN: llc -O0 -mtriple thumb-linux-linux -relocation-model=pic -mattr=+v6t2,-no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,ELF 3# RUN: llc -O0 -mtriple thumb-linux-darwin -relocation-model=pic -mattr=+v6t2,+no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,DARWIN-NOMOVT 4# RUN: llc -O0 -mtriple thumb-linux-darwin -relocation-model=pic -mattr=+v6t2,-no-movt -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=CHECK,DARWIN-MOVT 5--- | 6 @internal_global = internal global i32 42 7 define void @test_internal_global() { ret void } 8 9 @external_global = external global i32 10 define void @test_external_global() { ret void } 11 12 @internal_constant = internal constant i32 42 13 define void @test_internal_constant() { ret void } 14 15 @external_constant = external constant i32 16 define void @test_external_constant() { ret void } 17... 18--- 19name: test_internal_global 20# CHECK-LABEL: name: test_internal_global 21legalized: true 22regBankSelected: true 23selected: false 24# CHECK: selected: true 25registers: 26 - { id: 0, class: gprb } 27 - { id: 1, class: gprb } 28body: | 29 bb.0: 30 %0(p0) = G_GLOBAL_VALUE @internal_global 31 ; DARWIN-MOVT: [[G:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @internal_global 32 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @internal_global 33 ; ELF: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel @internal_global 34 35 %1(s32) = G_LOAD %0(p0) :: (load (s32) from @internal_global) 36 ; CHECK: [[V:%[0-9]+]]:gpr = t2LDRi12 [[G]], 0, 14 /* CC::al */, $noreg :: (load (s32) from @internal_global) 37 38 $r0 = COPY %1(s32) 39 ; CHECK: $r0 = COPY [[V]] 40 41 tBX_RET 14, $noreg, implicit $r0 42 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0 43... 44--- 45name: test_external_global 46# CHECK-LABEL: name: test_external_global 47legalized: true 48regBankSelected: true 49selected: false 50# CHECK: selected: true 51registers: 52 - { id: 0, class: gprb } 53 - { id: 1, class: gprb } 54body: | 55 bb.0: 56 %0(p0) = G_GLOBAL_VALUE @external_global 57 ; DARWIN-MOVT: [[G_GOT:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @external_global 58 ; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 59 ; DARWIN-NOMOVT: [[G_GOT:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @external_global 60 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 61 ; ELF: [[G_GOT:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-got) @external_global 62 ; ELF: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 63 64 %1(s32) = G_LOAD %0(p0) :: (load (s32) from @external_global) 65 ; CHECK: [[V:%[0-9]+]]:gpr = t2LDRi12 [[G]], 0, 14 /* CC::al */, $noreg :: (load (s32) from @external_global) 66 67 $r0 = COPY %1(s32) 68 ; CHECK: $r0 = COPY [[V]] 69 70 tBX_RET 14, $noreg, implicit $r0 71 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0 72... 73--- 74name: test_internal_constant 75# CHECK-LABEL: name: test_internal_constant 76legalized: true 77regBankSelected: true 78selected: false 79# CHECK: selected: true 80registers: 81 - { id: 0, class: gprb } 82 - { id: 1, class: gprb } 83body: | 84 bb.0: 85 %0(p0) = G_GLOBAL_VALUE @internal_constant 86 ; DARWIN-MOVT: [[G:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @internal_constant 87 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @internal_constant 88 ; ELF: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel @internal_constant 89 90 %1(s32) = G_LOAD %0(p0) :: (load (s32) from @internal_constant) 91 ; CHECK: [[V:%[0-9]+]]:gpr = t2LDRi12 [[G]], 0, 14 /* CC::al */, $noreg :: (load (s32) from @internal_constant) 92 93 $r0 = COPY %1(s32) 94 ; CHECK: $r0 = COPY [[V]] 95 96 tBX_RET 14, $noreg, implicit $r0 97 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0 98... 99--- 100name: test_external_constant 101# CHECK-LABEL: name: test_external_constant 102legalized: true 103regBankSelected: true 104selected: false 105# CHECK: selected: true 106registers: 107 - { id: 0, class: gprb } 108 - { id: 1, class: gprb } 109body: | 110 bb.0: 111 %0(p0) = G_GLOBAL_VALUE @external_constant 112 ; DARWIN-MOVT: [[G_GOT:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @external_constant 113 ; DARWIN-MOVT: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 114 ; DARWIN-NOMOVT: [[G_GOT:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @external_constant 115 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 116 ; ELF: [[G_GOT:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-got) @external_constant 117 ; ELF: [[G:%[0-9]+]]:gpr = t2LDRi12 [[G_GOT]], 0, 14 /* CC::al */, $noreg :: (load (s32) from got) 118 119 %1(s32) = G_LOAD %0(p0) :: (load (s32) from @external_constant) 120 ; CHECK: [[V:%[0-9]+]]:gpr = t2LDRi12 [[G]], 0, 14 /* CC::al */, $noreg :: (load (s32) from @external_constant) 121 122 $r0 = COPY %1(s32) 123 ; CHECK: $r0 = COPY [[V]] 124 125 tBX_RET 14, $noreg, implicit $r0 126 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0 127... 128