mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-22 07:32:48 +00:00
0aba46f4cd
The ARM backend has been using most of the MachO related subtarget checks almost interchangeably, and since the only target it's had to run on has been IOS (which is all three of MachO, Darwin and IOS) it's worked out OK so far. But we'd like to support embedded targets under the "*-*-none-macho" triple, which means everything starts falling apart and inconsistent behaviours emerge. This patch should pick a reasonably sensible set of behaviours for the new triple (and any others that come along, with luck). Some choices were debatable (notably FP == r7 or r11), but we can revisit those later when deficiencies become apparent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198617 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
2.0 KiB
LLVM
62 lines
2.0 KiB
LLVM
; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-THUMB-PIC
|
|
; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=pic -o - %s | FileCheck %s --check-prefix=CHECK-ARM-PIC
|
|
; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC
|
|
; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=dynamic-no-pic -o - %s | FileCheck %s --check-prefix=CHECK-DYNAMIC
|
|
; RUN: llc -mtriple=thumbv6m-apple-none-macho -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC
|
|
; RUN: llc -mtriple=arm-apple-none-macho -relocation-model=static -o - %s | FileCheck %s --check-prefix=CHECK-STATIC
|
|
@var = global [16 x i32] zeroinitializer
|
|
|
|
declare void @bar(i32*)
|
|
|
|
define void @foo() {
|
|
%flag = load i32* getelementptr inbounds([16 x i32]* @var, i32 0, i32 1)
|
|
%tst = icmp eq i32 %flag, 0
|
|
br i1 %tst, label %true, label %false
|
|
true:
|
|
tail call void @bar(i32* getelementptr inbounds([16 x i32]* @var, i32 0, i32 4))
|
|
ret void
|
|
false:
|
|
ret void
|
|
}
|
|
|
|
; CHECK-THUMB-PIC-LABEL: foo:
|
|
; CHECK-THUMB-PIC: ldr r0, LCPI0_0
|
|
; CHECK-THUMB-PIC: LPC0_0:
|
|
; CHECK-THUMB-PIC-NEXT: add r0, pc
|
|
; CHECK-THUMB-PIC: ldr {{r[1-9][0-9]?}}, [r0, #4]
|
|
|
|
; CHECK-THUMB-PIC: LCPI0_0:
|
|
; CHECK-THUMB-PIC-NEXT: .long _var-(LPC0_0+4)
|
|
; CHECK-THUMB-PIC-NOT: LCPI0_1
|
|
|
|
|
|
; CHECK-ARM-PIC-LABEL: foo:
|
|
; CHECK-ARM-PIC: ldr [[VAR_OFFSET:r[0-9]+]], LCPI0_0
|
|
; CHECK-ARM-PIC: LPC0_0:
|
|
; CHECK-ARM-PIC-NEXT: ldr r0, [pc, [[VAR_OFFSET]]]
|
|
; CHECK-ARM-PIC: ldr {{r[1-9][0-9]?}}, [r0, #4]
|
|
|
|
; CHECK-ARM-PIC: LCPI0_0:
|
|
; CHECK-ARM-PIC-NEXT: .long _var-(LPC0_0+8)
|
|
; CHECK-ARM-PIC-NOT: LCPI0_1
|
|
|
|
|
|
; CHECK-DYNAMIC-LABEL: foo:
|
|
; CHECK-DYNAMIC: ldr r0, LCPI0_0
|
|
; CHECK-DYNAMIC: ldr {{r[1-9][0-9]?}}, [r0, #4]
|
|
|
|
; CHECK-DYNAMIC: LCPI0_0:
|
|
; CHECK-DYNAMIC-NEXT: .long _var
|
|
; CHECK-DYNAMIC-NOT: LCPI0_1
|
|
|
|
|
|
; CHECK-STATIC-LABEL: foo:
|
|
; CHECK-STATIC: ldr r0, LCPI0_0
|
|
; CHECK-STATIC: ldr {{r[1-9][0-9]?}}, [r0, #4]
|
|
|
|
; CHECK-STATIC: LCPI0_0:
|
|
; CHECK-STATIC-NEXT: .long _var{{$}}
|
|
; CHECK-STATIC-NOT: LCPI0_1
|
|
|
|
|