128 lines · plain
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,ELF2# 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,ELF3# 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-NOMOVT4# 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-MOVT5--- |6 @internal_global = internal global i32 427 define void @test_internal_global() { ret void }8 9 @external_global = external global i3210 define void @test_external_global() { ret void }11 12 @internal_constant = internal constant i32 4213 define void @test_internal_constant() { ret void }14 15 @external_constant = external constant i3216 define void @test_external_constant() { ret void }17...18---19name: test_internal_global20# CHECK-LABEL: name: test_internal_global21legalized: true22regBankSelected: true23selected: false24# CHECK: selected: true25registers:26 - { id: 0, class: gprb }27 - { id: 1, class: gprb }28body: |29 bb.0:30 %0(p0) = G_GLOBAL_VALUE @internal_global31 ; DARWIN-MOVT: [[G:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @internal_global32 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @internal_global33 ; ELF: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel @internal_global34 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 $r042 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r043...44---45name: test_external_global46# CHECK-LABEL: name: test_external_global47legalized: true48regBankSelected: true49selected: false50# CHECK: selected: true51registers:52 - { id: 0, class: gprb }53 - { id: 1, class: gprb }54body: |55 bb.0:56 %0(p0) = G_GLOBAL_VALUE @external_global57 ; DARWIN-MOVT: [[G_GOT:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @external_global58 ; 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_global60 ; 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_global62 ; 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 $r071 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r072...73---74name: test_internal_constant75# CHECK-LABEL: name: test_internal_constant76legalized: true77regBankSelected: true78selected: false79# CHECK: selected: true80registers:81 - { id: 0, class: gprb }82 - { id: 1, class: gprb }83body: |84 bb.0:85 %0(p0) = G_GLOBAL_VALUE @internal_constant86 ; DARWIN-MOVT: [[G:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @internal_constant87 ; DARWIN-NOMOVT: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel target-flags(arm-nonlazy) @internal_constant88 ; ELF: [[G:%[0-9]+]]:tgpr = tLDRLIT_ga_pcrel @internal_constant89 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 $r097 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r098...99---100name: test_external_constant101# CHECK-LABEL: name: test_external_constant102legalized: true103regBankSelected: true104selected: false105# CHECK: selected: true106registers:107 - { id: 0, class: gprb }108 - { id: 1, class: gprb }109body: |110 bb.0:111 %0(p0) = G_GLOBAL_VALUE @external_constant112 ; DARWIN-MOVT: [[G_GOT:%[0-9]+]]:rgpr = t2MOV_ga_pcrel target-flags(arm-nonlazy) @external_constant113 ; 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_constant115 ; 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_constant117 ; 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 $r0126 ; CHECK: tBX_RET 14 /* CC::al */, $noreg, implicit $r0127...128