1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00

[NFC][ARM] Fix update_llc_test_checks for thumbv7-apple-darwin, autogenerate thumb2-ifcvt1.ll

This commit is contained in:
Roman Lebedev 2021-06-23 16:19:28 +03:00
parent 285eb4c722
commit 3b18af59bd
2 changed files with 179 additions and 26 deletions

View File

@ -1,15 +1,19 @@
; RUN: llc < %s -mtriple=thumbv7-apple-darwin | FileCheck %s
; RUN: llc < %s -mtriple=thumbv7-apple-darwin -arm-default-it | FileCheck %s
; RUN: llc < %s -mtriple=thumbv8 -arm-no-restrict-it | FileCheck %s
; RUN: llc < %s -mtriple=thumbv8 -arm-no-restrict-it -enable-tail-merge=0 | FileCheck %s
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=thumbv7-apple-darwin | FileCheck %s --check-prefixes=ALL,V01
; RUN: llc < %s -mtriple=thumbv7-apple-darwin -arm-default-it | FileCheck %s --check-prefixes=ALL,V01
; RUN: llc < %s -mtriple=thumbv8 -arm-no-restrict-it | FileCheck %s --check-prefixes=ALL,V23,V2
; RUN: llc < %s -mtriple=thumbv8 -arm-no-restrict-it -enable-tail-merge=0 | FileCheck %s --check-prefixes=ALL,V23,V3
define i32 @t1(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
; CHECK-LABEL: t1:
; CHECK: ittee ne
; CHECK: cmpne
; CHECK: addne
; CHECK: addeq
; CHECK: addeq
; CHECK: bx lr
; ALL-LABEL: t1:
; ALL: @ %bb.0:
; ALL-NEXT: cmp r2, #7
; ALL-NEXT: ittee ne
; ALL-NEXT: cmpne r2, #1
; ALL-NEXT: addne r0, r1
; ALL-NEXT: addeq r0, r1
; ALL-NEXT: addeq r0, #1
; ALL-NEXT: bx lr
switch i32 %c, label %cond_next [
i32 1, label %cond_true
i32 7, label %cond_true
@ -26,11 +30,54 @@ cond_next:
}
define i32 @t2(i32 %a, i32 %b) nounwind {
; V01-LABEL: t2:
; V01: @ %bb.0: @ %entry
; V01-NEXT: cmp r0, r1
; V01-NEXT: it eq
; V01-NEXT: bxeq lr
; V01-NEXT: LBB1_1: @ %bb
; V01-NEXT: @ =>This Inner Loop Header: Depth=1
; V01-NEXT: cmp r0, r1
; V01-NEXT: ite gt
; V01-NEXT: subgt r0, r0, r1
; V01-NEXT: suble r1, r1, r0
; V01-NEXT: cmp r1, r0
; V01-NEXT: bne LBB1_1
; V01-NEXT: @ %bb.2: @ %bb17
; V01-NEXT: bx lr
;
; V2-LABEL: t2:
; V2: @ %bb.0: @ %entry
; V2-NEXT: cmp r0, r1
; V2-NEXT: it eq
; V2-NEXT: bxeq lr
; V2-NEXT: .LBB1_1: @ %bb
; V2-NEXT: @ =>This Inner Loop Header: Depth=1
; V2-NEXT: cmp r0, r1
; V2-NEXT: ite gt
; V2-NEXT: subgt r0, r0, r1
; V2-NEXT: suble r1, r1, r0
; V2-NEXT: cmp r1, r0
; V2-NEXT: bne .LBB1_1
; V2-NEXT: @ %bb.2: @ %bb17
; V2-NEXT: bx lr
;
; V3-LABEL: t2:
; V3: @ %bb.0: @ %entry
; V3-NEXT: cmp r0, r1
; V3-NEXT: it eq
; V3-NEXT: bxeq lr
; V3-NEXT: .LBB1_1: @ %bb
; V3-NEXT: @ =>This Inner Loop Header: Depth=1
; V3-NEXT: cmp r0, r1
; V3-NEXT: ite le
; V3-NEXT: suble r1, r1, r0
; V3-NEXT: subgt r0, r0, r1
; V3-NEXT: cmp r1, r0
; V3-NEXT: bne .LBB1_1
; V3-NEXT: @ %bb.2: @ %bb17
; V3-NEXT: bx lr
entry:
; CHECK-LABEL: t2:
; CHECK: ite {{gt|le}}
; CHECK-DAG: suble
; CHECK-DAG: subgt
%tmp1434 = icmp eq i32 %a, %b ; <i1> [#uses=1]
br i1 %tmp1434, label %bb17, label %bb.outer
@ -64,11 +111,75 @@ bb17: ; preds = %cond_false, %cond_true, %entry
}
define i32 @t2_nomerge(i32 %a, i32 %b) nounwind {
; V01-LABEL: t2_nomerge:
; V01: @ %bb.0: @ %entry
; V01-NEXT: cmp r0, r1
; V01-NEXT: it eq
; V01-NEXT: bxeq lr
; V01-NEXT: LBB2_1: @ %bb
; V01-NEXT: @ =>This Inner Loop Header: Depth=1
; V01-NEXT: cmp r0, r1
; V01-NEXT: ble LBB2_3
; V01-NEXT: @ %bb.2: @ %cond_true
; V01-NEXT: @ in Loop: Header=BB2_1 Depth=1
; V01-NEXT: subs r0, r0, r1
; V01-NEXT: cmp r1, r0
; V01-NEXT: bne LBB2_1
; V01-NEXT: b LBB2_4
; V01-NEXT: LBB2_3: @ %cond_false
; V01-NEXT: @ in Loop: Header=BB2_1 Depth=1
; V01-NEXT: subs r1, r1, r0
; V01-NEXT: cmp r0, #0
; V01-NEXT: bne LBB2_1
; V01-NEXT: LBB2_4: @ %bb17
; V01-NEXT: bx lr
;
; V2-LABEL: t2_nomerge:
; V2: @ %bb.0: @ %entry
; V2-NEXT: cmp r0, r1
; V2-NEXT: it eq
; V2-NEXT: bxeq lr
; V2-NEXT: .LBB2_1: @ %bb
; V2-NEXT: @ =>This Inner Loop Header: Depth=1
; V2-NEXT: cmp r0, r1
; V2-NEXT: ble .LBB2_3
; V2-NEXT: @ %bb.2: @ %cond_true
; V2-NEXT: @ in Loop: Header=BB2_1 Depth=1
; V2-NEXT: subs r0, r0, r1
; V2-NEXT: cmp r1, r0
; V2-NEXT: bne .LBB2_1
; V2-NEXT: b .LBB2_4
; V2-NEXT: .LBB2_3: @ %cond_false
; V2-NEXT: @ in Loop: Header=BB2_1 Depth=1
; V2-NEXT: subs r1, r1, r0
; V2-NEXT: cmp r0, #0
; V2-NEXT: bne .LBB2_1
; V2-NEXT: .LBB2_4: @ %bb17
; V2-NEXT: bx lr
;
; V3-LABEL: t2_nomerge:
; V3: @ %bb.0: @ %entry
; V3-NEXT: cmp r0, r1
; V3-NEXT: beq .LBB2_4
; V3-NEXT: b .LBB2_2
; V3-NEXT: .LBB2_1: @ %cond_true
; V3-NEXT: @ in Loop: Header=BB2_2 Depth=1
; V3-NEXT: subs r0, r0, r1
; V3-NEXT: cmp r1, r0
; V3-NEXT: it eq
; V3-NEXT: bxeq lr
; V3-NEXT: .LBB2_2: @ %bb
; V3-NEXT: @ =>This Inner Loop Header: Depth=1
; V3-NEXT: cmp r0, r1
; V3-NEXT: bgt .LBB2_1
; V3-NEXT: @ %bb.3: @ %cond_false
; V3-NEXT: @ in Loop: Header=BB2_2 Depth=1
; V3-NEXT: subs r1, r1, r0
; V3-NEXT: cmp r0, #0
; V3-NEXT: bne .LBB2_2
; V3-NEXT: .LBB2_4: @ %bb17
; V3-NEXT: bx lr
entry:
; CHECK-LABEL: t2_nomerge:
; CHECK-NOT: ite {{gt|le}}
; CHECK-NOT: suble
; CHECK-NOT: subgt
%tmp1434 = icmp eq i32 %a, %b ; <i1> [#uses=1]
br i1 %tmp1434, label %bb17, label %bb.outer
@ -104,6 +215,24 @@ bb17: ; preds = %cond_false, %cond_true, %entry
@x = external global i32* ; <i32**> [#uses=1]
define void @foo(i32 %a) nounwind {
; V01-LABEL: foo:
; V01: @ %bb.0: @ %entry
; V01-NEXT: movw r1, :lower16:(L_x$non_lazy_ptr-(LPC3_0+4))
; V01-NEXT: movt r1, :upper16:(L_x$non_lazy_ptr-(LPC3_0+4))
; V01-NEXT: LPC3_0:
; V01-NEXT: add r1, pc
; V01-NEXT: ldr r1, [r1]
; V01-NEXT: ldr r1, [r1]
; V01-NEXT: str r0, [r1]
; V01-NEXT: bx lr
;
; V23-LABEL: foo:
; V23: @ %bb.0: @ %entry
; V23-NEXT: movw r1, :lower16:x
; V23-NEXT: movt r1, :upper16:x
; V23-NEXT: ldr r1, [r1]
; V23-NEXT: str r0, [r1]
; V23-NEXT: bx lr
entry:
%tmp = load i32*, i32** @x ; <i32*> [#uses=1]
store i32 %a, i32* %tmp
@ -111,12 +240,29 @@ entry:
}
define void @t3(i32 %a, i32 %b) nounwind {
; V01-LABEL: t3:
; V01: @ %bb.0: @ %entry
; V01-NEXT: cmp r0, #11
; V01-NEXT: it lt
; V01-NEXT: bxlt lr
; V01-NEXT: LBB4_1: @ %cond_true
; V01-NEXT: str lr, [sp, #-4]!
; V01-NEXT: mov r0, r1
; V01-NEXT: bl _foo
; V01-NEXT: ldr lr, [sp], #4
; V01-NEXT: bx lr
;
; V23-LABEL: t3:
; V23: @ %bb.0: @ %entry
; V23-NEXT: cmp r0, #11
; V23-NEXT: it lt
; V23-NEXT: bxlt lr
; V23-NEXT: .LBB4_1: @ %cond_true
; V23-NEXT: push {r7, lr}
; V23-NEXT: mov r0, r1
; V23-NEXT: bl foo
; V23-NEXT: pop {r7, pc}
entry:
; CHECK-LABEL: t3:
; CHECK: it lt
; CHECK-NEXT: bxlt lr
; CHECK: mov r0, r1
; CHECK: bl {{_?}}foo
%tmp1 = icmp sgt i32 %a, 10 ; <i1> [#uses=1]
br i1 %tmp1, label %cond_true, label %UnifiedReturnBlock

View File

@ -141,12 +141,18 @@ ASM_FUNCTION_ARM_MACHO_RE = re.compile(
r'[ \t]*\.cfi_endproc\n',
flags=(re.M | re.S))
ASM_FUNCTION_THUMB_DARWIN_RE = re.compile(
ASM_FUNCTION_THUMBS_DARWIN_RE = re.compile(
r'^_(?P<func>[^:]+):\n'
r'(?P<body>.*?)\n'
r'[ \t]*\.data_region\n',
flags=(re.M | re.S))
ASM_FUNCTION_THUMB_DARWIN_RE = re.compile(
r'^_(?P<func>[^:]+):\n'
r'(?P<body>.*?)\n'
r'^[ \t]*@[ \t]--[ \t]End[ \t]function',
flags=(re.M | re.S))
ASM_FUNCTION_ARM_IOS_RE = re.compile(
r'^_(?P<func>[^:]+):\n'
r'(?P<body>.*?)'
@ -382,7 +388,8 @@ def get_run_handler(triple):
'thumb': (scrub_asm_arm_eabi, ASM_FUNCTION_ARM_RE),
'thumb-macho': (scrub_asm_arm_eabi, ASM_FUNCTION_ARM_MACHO_RE),
'thumbv5-macho': (scrub_asm_arm_eabi, ASM_FUNCTION_ARM_MACHO_RE),
'thumbv7s-apple-darwin' : (scrub_asm_arm_eabi, ASM_FUNCTION_THUMB_DARWIN_RE),
'thumbv7s-apple-darwin' : (scrub_asm_arm_eabi, ASM_FUNCTION_THUMBS_DARWIN_RE),
'thumbv7-apple-darwin' : (scrub_asm_arm_eabi, ASM_FUNCTION_THUMB_DARWIN_RE),
'thumbv7-apple-ios' : (scrub_asm_arm_eabi, ASM_FUNCTION_ARM_IOS_RE),
'm68k': (scrub_asm_m68k, ASM_FUNCTION_M68K_RE),
'mips': (scrub_asm_mips, ASM_FUNCTION_MIPS_RE),