mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
e0e3fee19b
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. llvm-svn: 198617
47 lines
1.6 KiB
LLVM
47 lines
1.6 KiB
LLVM
; RUN: llc < %s -mtriple=armv7-apple-ios3.0 | FileCheck %s
|
|
; RUN: llc < %s -mtriple=armv4t-apple-ios3.0 | FileCheck %s -check-prefix=V4T
|
|
|
|
@X = external global [0 x i32] ; <[0 x i32]*> [#uses=5]
|
|
|
|
define i32 @t1() {
|
|
; CHECK-LABEL: t1:
|
|
; CHECK: pop
|
|
; V4T-LABEL: t1:
|
|
; V4T: pop
|
|
%tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 0) ; <i32> [#uses=1]
|
|
%tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 1) ; <i32> [#uses=1]
|
|
%tmp4 = tail call i32 @f1( i32 %tmp, i32 %tmp3 ) ; <i32> [#uses=1]
|
|
ret i32 %tmp4
|
|
}
|
|
|
|
define i32 @t2() {
|
|
; CHECK-LABEL: t2:
|
|
; CHECK: pop
|
|
; V4T-LABEL: t2:
|
|
; V4T: pop
|
|
%tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 2) ; <i32> [#uses=1]
|
|
%tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 3) ; <i32> [#uses=1]
|
|
%tmp5 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 4) ; <i32> [#uses=1]
|
|
%tmp6 = tail call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 ) ; <i32> [#uses=1]
|
|
ret i32 %tmp6
|
|
}
|
|
|
|
define i32 @t3() {
|
|
; CHECK-LABEL: t3:
|
|
; CHECK: ldmib
|
|
; CHECK: pop
|
|
; V4T-LABEL: t3:
|
|
; V4T: ldmib
|
|
; V4T: pop
|
|
; V4T-NEXT: bx lr
|
|
%tmp = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 1) ; <i32> [#uses=1]
|
|
%tmp3 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 2) ; <i32> [#uses=1]
|
|
%tmp5 = load i32* getelementptr ([0 x i32]* @X, i32 0, i32 3) ; <i32> [#uses=1]
|
|
%tmp6 = call i32 @f2( i32 %tmp, i32 %tmp3, i32 %tmp5 ) ; <i32> [#uses=1]
|
|
ret i32 %tmp6
|
|
}
|
|
|
|
declare i32 @f1(i32, i32)
|
|
|
|
declare i32 @f2(i32, i32, i32)
|