Imported Upstream version 5.18.0.207

Former-commit-id: 3b152f462918d427ce18620a2cbe4f8b79650449
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-11-17 08:23:10 +00:00
parent 8e12397d70
commit eb85e2fc17
28480 changed files with 72 additions and 3866936 deletions

View File

@ -1,23 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
---
name: foo
body: |
bb.0:
B %bb.2
bb.1:
BX_RET 14, 0
bb.2:
Bcc %bb.1, 1, %cpsr
bb.3:
B %bb.1
...
# We should get a single block containing the BX_RET, with no successors at all
# CHECK: body:
# CHECK-NEXT: bb.0:
# CHECK-NEXT: BX_RET

View File

@ -1,75 +0,0 @@
# RUN: llc -mtriple thumbv7-apple-ios -run-pass none -o - %s | FileCheck %s
# This test ensures that the MIR parser parses the bundled machine instructions
# and 'internal' register flags correctly.
--- |
define i32 @test1(i32 %a) {
entry:
%cmp = icmp sgt i32 %a, -78
%. = zext i1 %cmp to i32
ret i32 %.
}
define i32 @test2(i32 %a) {
entry:
%cmp = icmp sgt i32 %a, -78
%. = zext i1 %cmp to i32
ret i32 %.
}
...
---
name: test1
tracksRegLiveness: true
liveins:
- { reg: '%r0' }
body: |
bb.0.entry:
liveins: %r0
; CHECK-LABEL: name: test1
; CHECK: %r1 = t2MOVi 0, 14, %noreg, %noreg
; CHECK-NEXT: t2CMNri killed %r0, 78, 14, %noreg, implicit-def %cpsr
; CHECK-NEXT: BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr {
; CHECK-NEXT: t2IT 12, 8, implicit-def %itstate
; CHECK-NEXT: %r1 = t2MOVi 1, 12, killed %cpsr, %noreg, implicit internal killed %itstate
; CHECK-NEXT: }
; CHECK-NEXT: %r0 = tMOVr killed %r1, 14, %noreg
; CHECK-NEXT: tBX_RET 14, %noreg, implicit killed %r0
%r1 = t2MOVi 0, 14, _, _
t2CMNri killed %r0, 78, 14, _, implicit-def %cpsr
BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr {
t2IT 12, 8, implicit-def %itstate
%r1 = t2MOVi 1, 12, killed %cpsr, _, implicit internal killed %itstate
}
%r0 = tMOVr killed %r1, 14, _
tBX_RET 14, _, implicit killed %r0
...
---
name: test2
tracksRegLiveness: true
liveins:
- { reg: '%r0' }
body: |
bb.0.entry:
liveins: %r0
; Verify that the next machine instruction can be on the same line as
; '{' or '}'.
; CHECK-LABEL: name: test2
; CHECK: %r1 = t2MOVi 0, 14, %noreg, %noreg
; CHECK-NEXT: t2CMNri killed %r0, 78, 14, %noreg, implicit-def %cpsr
; CHECK-NEXT: BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr {
; CHECK-NEXT: t2IT 12, 8, implicit-def %itstate
; CHECK-NEXT: %r1 = t2MOVi 1, 12, killed %cpsr, %noreg, implicit internal killed %itstate
; CHECK-NEXT: }
; CHECK-NEXT: %r0 = tMOVr killed %r1, 14, %noreg
; CHECK-NEXT: tBX_RET 14, %noreg, implicit killed %r0
%r1 = t2MOVi 0, 14, _, _
t2CMNri killed %r0, 78, 14, _, implicit-def %cpsr
BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr { t2IT 12, 8, implicit-def %itstate
%r1 = t2MOVi 1, 12, killed %cpsr, _, internal implicit killed %itstate
} %r0 = tMOVr killed %r1, 14, _
tBX_RET 14, _, implicit killed %r0
...

View File

@ -1,80 +0,0 @@
# RUN: llc -mtriple=arm-linux-unknown-gnueabi -run-pass none -o - %s | FileCheck %s
--- |
declare void @dummy_use(i32*, i32)
define void @test_basic() #0 {
entry:
%mem = alloca i32, i32 10
call void @dummy_use(i32* %mem, i32 10)
ret void
}
attributes #0 = { "split-stack" }
...
---
name: test_basic
tracksRegLiveness: true
frameInfo:
stackSize: 48
maxAlignment: 4
adjustsStack: true
hasCalls: true
stack:
- { id: 0, name: mem, offset: -48, size: 40, alignment: 4 }
- { id: 1, type: spill-slot, offset: -4, size: 4, alignment: 4,
callee-saved-register: '%lr' }
- { id: 2, type: spill-slot, offset: -8, size: 4, alignment: 4,
callee-saved-register: '%r11' }
body: |
bb.0:
successors: %bb.2, %bb.1
liveins: %r11, %lr
%sp = STMDB_UPD %sp, 14, _, %r4, %r5
CFI_INSTRUCTION def_cfa_offset 8
CFI_INSTRUCTION offset %r5, -4
CFI_INSTRUCTION offset %r4, -8
%r5 = MOVr %sp, 14, _, _
%r4 = MRC 15, 0, 13, 0, 3, 14, _
%r4 = LDRi12 %r4, 4, 14, _
CMPrr %r4, %r5, 14, _, implicit-def %cpsr
Bcc %bb.2, 3, %cpsr
bb.1:
successors: %bb.2
liveins: %r11, %lr
%r4 = MOVi 48, 14, _, _
%r5 = MOVi 0, 14, _, _
%sp = STMDB_UPD %sp, 14, _, %lr
CFI_INSTRUCTION def_cfa_offset 12
CFI_INSTRUCTION offset %lr, -12
BL $__morestack, implicit-def %lr, implicit %sp
%sp = LDMIA_UPD %sp, 14, _, %lr
%sp = LDMIA_UPD %sp, 14, _, %r4, %r5
CFI_INSTRUCTION def_cfa_offset 0
BX_RET 14, _
bb.2:
liveins: %r11, %lr
%sp = LDMIA_UPD %sp, 14, _, %r4, %r5
CFI_INSTRUCTION def_cfa_offset 0
; CHECK: CFI_INSTRUCTION same_value %r4
; CHECK-NEXT: CFI_INSTRUCTION same_value %r5
CFI_INSTRUCTION same_value %r4
CFI_INSTRUCTION same_value %r5
%sp = frame-setup STMDB_UPD %sp, 14, _, killed %r11, killed %lr
frame-setup CFI_INSTRUCTION def_cfa_offset 8
frame-setup CFI_INSTRUCTION offset %lr, -4
frame-setup CFI_INSTRUCTION offset %r11, -8
%sp = frame-setup SUBri killed %sp, 40, 14, _, _
frame-setup CFI_INSTRUCTION def_cfa_offset 48
%r0 = MOVr %sp, 14, _, _
%r1 = MOVi 10, 14, _, _
BL @dummy_use, csr_aapcs, implicit-def dead %lr, implicit %sp, implicit %r0, implicit killed %r1, implicit-def %sp
%sp = ADDri killed %sp, 40, 14, _, _
%sp = LDMIA_UPD %sp, 14, _, %r4, %r5
MOVPCLR 14, _
...

View File

@ -1,50 +0,0 @@
# RUN: not llc -mtriple thumbv7-apple-ios -run-pass none -o /dev/null %s 2>&1 | FileCheck %s
--- |
@G = external global i32
define i32 @test1(i32 %a) {
entry:
br label %foo
foo:
%cmp = icmp sgt i32 %a, -78
%. = zext i1 %cmp to i32
br i1 %cmp, label %if.then, label %if.else
if.then:
ret i32 %.
if.else:
%b = load i32, i32* @G
%c = add i32 %b, 1
br label %foo
}
...
---
name: test1
tracksRegLiveness: true
liveins:
- { reg: '%r0' }
body: |
bb.0.entry:
successors: %bb.1.foo
liveins: %r0
bb.1.foo:
successors: %bb.2.if.then, %bb.1.foo
liveins: %r0
t2CMNri %r0, 78, 14, _, implicit-def %cpsr
%r1 = t2MOVi 0, 14, _, _
BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr {
t2IT 12, 8, implicit-def %itstate
%r1 = t2MOVi 1, 12, killed %cpsr, _, implicit killed %itstate
t2CMNri %r0, 77, 14, _, implicit-def %cpsr
t2Bcc %bb.1.foo, 11, killed %cpsr
; CHECK: [[@LINE+1]]:3: expected '}'
bb.2.if.then:
liveins: %r1
%r0 = tMOVr killed %r1, 14, _
tBX_RET 14, _, implicit killed %r0
...

View File

@ -1,20 +0,0 @@
# RUN: not llc -mtriple thumbv7-apple-ios -run-pass none -o /dev/null %s 2>&1 | FileCheck %s
--- |
define i32 @test1(i32 %a) {
entry:
ret i32 %a
}
...
---
name: test1
tracksRegLiveness: true
liveins:
- { reg: '%r0' }
body: |
bb.0.entry:
liveins: %r0
tBX_RET 14, _, implicit killed %r0
; CHECK: [[@LINE+1]]:5: extraneous closing brace ('}')
}
...

View File

@ -1,65 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -o - %s -run-pass if-converter | FileCheck %s
---
name: f1
body: |
bb.0:
successors: %bb.1
B %bb.1
bb.1:
successors: %bb.2, %bb.4
Bcc %bb.4, 1, %cpsr
bb.2:
successors: %bb.3, %bb.5
Bcc %bb.5, 1, %cpsr
bb.3:
successors: %bb.5
B %bb.5
bb.4:
successors:
bb.5:
successors: %bb.1, %bb.6
Bcc %bb.1, 1, %cpsr
bb.6:
BX_RET 14, _
...
# IfConversion.cpp/canFallThroughTo thought there was a fallthrough from
# bb.4 to bb5 even if the successor list was empty.
# bb.4 is empty, so it surely looks like it can fallthrough, but this is what
# happens for a bb just containing an "unreachable".
#CHECK: body: |
#CHECK: bb.0:
#CHECK: successors: %bb.1
#CHECK: bb.1:
#CHECK: successors: %bb.3({{.*}}), %bb.2
# The original brr_cond from bb.1, jumping to the empty bb
#CHECK: Bcc %bb.2
#CHECK: B %bb.3
# Empty bb.2, originally containing "unreachable" and thus has no successors
# and we cannot guess them: we should print an empty list of successors.
#CHECK: bb.2:
#CHECK: successors:{{ *$}}
#CHECK: bb.3:
#CHECK: successors: %bb.1
# Conditional BX_RET and then loop back to bb.1
#CHECK: BX_RET 0
#CHECK: B %bb.1

View File

@ -1,30 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
---
name: foo
body: |
bb.0:
Bcc %bb.2, 1, %cpsr
bb.1:
%sp = tADDspi %sp, 1, 14, _
B %bb.3
bb.2:
%sp = tADDspi %sp, 2, 14, _
B %bb.3
bb.3:
successors:
%sp = tADDspi %sp, 3, 14, _
BX_RET 14, _
...
# Diamond testcase with unanalyzable instruction in the BB following the
# diamond.
# CHECK: body: |
# CHECK: bb.0:
# CHECK: %sp = tADDspi %sp, 2, 1, %cpsr
# CHECK: %sp = tADDspi %sp, 1, 0, %cpsr, implicit %sp
# CHECK: %sp = tADDspi %sp, 3, 14, %noreg
# CHECK: BX_RET 14, %noreg

View File

@ -1,48 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
---
name: foo
body: |
bb.0:
Bcc %bb.2, 1, %cpsr
bb.1:
successors: %bb.3(0x20000000), %bb.4(0x60000000)
%sp = tADDspi %sp, 1, 14, _
Bcc %bb.3, 1, %cpsr
B %bb.4
bb.2:
successors: %bb.3(0x20000000), %bb.4(0x60000000)
%sp = tADDspi %sp, 2, 14, _
Bcc %bb.3, 1, %cpsr
B %bb.4
bb.3:
successors:
%sp = tADDspi %sp, 3, 14, _
BX_RET 14, _
bb.4:
successors:
%sp = tADDspi %sp, 4, 14, _
BX_RET 14, _
...
# Forked-diamond testcase with unanalyzable instructions in both the True and
# False BBs following the forked diamond.
# CHECK: body: |
# CHECK: bb.0:
# CHECK: successors: %bb.2(0x20000000), %bb.1(0x60000000)
# CHECK: %sp = tADDspi %sp, 2, 1, %cpsr
# CHECK: %sp = tADDspi %sp, 1, 0, %cpsr, implicit %sp
# CHECK: Bcc %bb.2, 1, %cpsr
# CHECK: bb.1:
# CHECK: %sp = tADDspi %sp, 4, 14, %noreg
# CHECK: BX_RET 14, %noreg
# CHECK: bb.2:
# CHECK: %sp = tADDspi %sp, 3, 14, %noreg
# CHECK: BX_RET 14, %noreg

View File

@ -1,33 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
---
name: f1
body: |
bb.0:
bb.1:
Bcc %bb.3, 0, %cpsr
bb.2:
bb.3:
Bcc %bb.1, 0, %cpsr
bb.4:
successors: %bb.1
tBRIND %r1, 14, _
...
# We should only get bb.1 as successor to bb.1. No zero percent probability
# edge from bb.1 to bb.2. There shouldn't even be a bb.2 at all.
# CHECK: body: |
# CHECK: bb.0:
# CHECK: successors: %bb.1(0x80000000)
# CHECK: bb.1:
# CHECK: successors: %bb.1(0x80000000)
# CHECK-NOT: %bb.2(0x00000000)
# CHECK: tBRIND %r1, 1, %cpsr
# CHECK: B %bb.1
#CHECK-NOT: bb.2:

View File

@ -1,25 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
---
name: foo
body: |
bb.0:
Bcc %bb.2, 0, %cpsr
bb.1:
successors:
BX_RET 14, _
bb.2:
successors:
%sp = tADDspi %sp, 2, 14, _
BX_RET 14, _
...
# Simple testcase with unanalyzable instructions in both TBB and FBB.
# CHECK: body: |
# CHECK: bb.0:
# CHECK: %sp = tADDspi %sp, 2, 0, %cpsr
# CHECK: BX_RET 0, %cpsr
# CHECK: BX_RET 14, %noreg

View File

@ -1,52 +0,0 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter %s -o - | FileCheck %s
--- |
declare void @__stack_chk_fail()
declare void @bar()
define void @foo() {
ret void
}
...
---
name: foo
body: |
bb.0:
Bcc %bb.1, 1, %cpsr
B %bb.2
bb.1:
Bcc %bb.3, 0, %cpsr
bb.2:
successors:
tBL 14, %cpsr, @__stack_chk_fail
bb.3:
successors:
%sp = tADDspi %sp, 2, 14, _
%sp = tADDspi %sp, 2, 14, _
tTAILJMPdND @bar, 14, %cpsr
...
# bb.2 has no successors, presumably because __stack_chk_fail doesn't return,
# so there should be no edge from bb.2 to bb.3.
# Nevertheless, IfConversion treats bb.1, bb.2, bb.3 as a triangle and
# inserts a predicated copy of bb.2 in bb.1.
# This caused r302876 to die with a failed assertion.
# CHECK: bb.0:
# CHECK: successors: %bb.2(0x40000000), %bb.1(0x40000000)
# CHECK: Bcc %bb.2, 1, %cpsr
# CHECK: bb.1:
# CHECK-NOT: successors: %bb
# CHECK: tBL 14, %cpsr, @__stack_chk_fail
# CHECK: bb.2:
# CHECK-NOT: successors: %bb
# CHECK: tBL 1, %cpsr, @__stack_chk_fail
# CHECK: %sp = tADDspi %sp, 2, 14, %noreg
# CHECK: %sp = tADDspi %sp, 2, 14, %noreg
# CHECK: tTAILJMPdND @bar, 14, %cpsr

View File

@ -1,2 +0,0 @@
if not 'ARM' in config.root.targets:
config.unsupported = True

View File

@ -1,30 +0,0 @@
# RUN: not llc -mtriple thumbv7-apple-ios -run-pass none -o /dev/null %s 2>&1 | FileCheck %s
--- |
define i32 @test1(i32 %a) {
entry:
%cmp = icmp sgt i32 %a, -78
%. = zext i1 %cmp to i32
ret i32 %.
}
...
---
name: test1
tracksRegLiveness: true
liveins:
- { reg: '%r0' }
body: |
bb.0.entry:
liveins: %r0
%r1 = t2MOVi 0, 14, _, _
t2CMNri killed %r0, 78, 14, _, implicit-def %cpsr
BUNDLE implicit-def dead %itstate, implicit-def %r1, implicit killed %cpsr {
t2IT 12, 8, implicit-def %itstate
%r1 = t2MOVi 1, 12, killed %cpsr, _
; CHECK: [[@LINE+1]]:14: nested instruction bundles are not allowed
BUNDLE {
}
}
%r0 = tMOVr killed %r1, 14, _
tBX_RET 14, _, implicit killed %r0
...

View File

@ -1,27 +0,0 @@
# RUN: not llc -mtriple arm-unknown -run-pass none -o /dev/null %s 2>&1 | FileCheck %s
--- |
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
@g = private global i32 4
define void @target_constant_pool() { ret void }
...
---
name: target_constant_pool
tracksRegLiveness: true
registers:
- { id: 0, class: gpr, preferred-register: '' }
- { id: 1, class: gpr, preferred-register: '' }
constants:
- id: 0
# CHECK: [[@LINE+1]]:22: Can't parse target-specific constant pool entries yet
value: 'g-(LPC0+8)'
alignment: 4
isTargetSpecific: true
body: |
bb.0.entry:
%0 = LDRi12 %const.0, 0, 14, _ :: (load 4 from constant-pool)
%1 = PICLDR killed %0, 0, 14, _ :: (dereferenceable load 4 from @g)
%r0 = COPY %1
BX_RET 14, _, implicit %r0
...