[llvm] r277428 - AArch64: Add missing branch relaxation tests

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 2 00:41:05 PDT 2016


Author: arsenm
Date: Tue Aug  2 02:41:05 2016
New Revision: 277428

URL: http://llvm.org/viewvc/llvm-project?rev=277428&view=rev
Log:
AArch64: Add missing branch relaxation tests

The branch relaxation pass has the worst test coverage
of any pass in AArch64. Add a few tests that hit some
large pieces of code in the pass.

Added:
    llvm/trunk/test/CodeGen/AArch64/branch-relax-bcc.ll
    llvm/trunk/test/CodeGen/AArch64/branch-relax-cbz.ll

Added: llvm/trunk/test/CodeGen/AArch64/branch-relax-bcc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/branch-relax-bcc.ll?rev=277428&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/branch-relax-bcc.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/branch-relax-bcc.ll Tue Aug  2 02:41:05 2016
@@ -0,0 +1,77 @@
+; RUN: llc -mtriple=aarch64-apple-darwin -aarch64-bcc-offset-bits=3 < %s | FileCheck %s
+
+; CHECK-LABEL: invert_bcc:
+; CHECK:       fcmp s0, s1
+; CHECK-NEXT:  b.ne [[BB1:LBB[0-9]+_[0-9]+]]
+; CHECK-NEXT:  b.vs [[BB2:LBB[0-9]+_[0-9]+]]
+; CHECK-NEXT:  b [[BB2]]
+
+; CHECK: [[BB1]]:
+; CHECK: mov w{{[0-9]+}}, #9
+; CHECK: ret
+
+; CHECK: [[BB2]]:
+; CHECK: mov w{{[0-9]+}}, #42
+; CHECK: ret
+
+define i32 @invert_bcc(float %x, float %y) #0 {
+  %1 = fcmp ueq float %x, %y
+  br i1 %1, label %bb1, label %bb2
+
+bb2:
+  call void asm sideeffect
+    "nop
+     nop",
+    ""() #0
+  store volatile i32 9, i32* undef
+  ret i32 1
+
+bb1:
+  store volatile i32 42, i32* undef
+  ret i32 0
+}
+
+declare i32 @foo() #0
+
+; CHECK-LABEL: _block_split:
+; CHECK: cmp w0, #5
+; CHECK-NEXT: b.eq [[LONG_BR_BB:LBB[0-9]+_[0-9]+]]
+; CHECK-NEXT: b [[LOR_LHS_FALSE_BB:LBB[0-9]+_[0-9]+]]
+
+; CHECK: [[LONG_BR_BB]]:
+; CHECK-NEXT: b [[IF_THEN_BB:LBB[0-9]+_[0-9]+]]
+
+; CHECK: [[LOR_LHS_FALSE_BB]]:
+; CHECK: cmp w{{[0-9]+}}, #16
+; CHECK-NEXT: b.le [[IF_THEN_BB]]
+; CHECK-NEXT: b [[IF_END_BB:LBB[0-9]+_[0-9]+]]
+
+; CHECK: [[IF_THEN_BB]]:
+; CHECK: bl _foo
+; CHECK-NOT: b L
+
+; CHECK: [[IF_END_BB]]:
+; CHECK: #0x7
+; CHECK: ret
+define i32 @block_split(i32 %a, i32 %b) #0 {
+entry:
+  %cmp = icmp eq i32 %a, 5
+  br i1 %cmp, label %if.then, label %lor.lhs.false
+
+lor.lhs.false:                                    ; preds = %entry
+  %cmp1 = icmp slt i32 %b, 7
+  %mul = shl nsw i32 %b, 1
+  %add = add nsw i32 %b, 1
+  %cond = select i1 %cmp1, i32 %mul, i32 %add
+  %cmp2 = icmp slt i32 %cond, 17
+  br i1 %cmp2, label %if.then, label %if.end
+
+if.then:                                          ; preds = %lor.lhs.false, %entry
+  %call = tail call i32 @foo()
+  br label %if.end
+
+if.end:                                           ; preds = %if.then, %lor.lhs.false
+  ret i32 7
+}
+
+attributes #0 = { nounwind }

Added: llvm/trunk/test/CodeGen/AArch64/branch-relax-cbz.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/branch-relax-cbz.ll?rev=277428&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/branch-relax-cbz.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/branch-relax-cbz.ll Tue Aug  2 02:41:05 2016
@@ -0,0 +1,51 @@
+; RUN: llc -mtriple=aarch64-apple-darwin -aarch64-cbz-offset-bits=3 < %s | FileCheck %s
+
+; CHECK-LABEL: _split_block_no_fallthrough:
+; CHECK: cmn x{{[0-9]+}}, #5
+; CHECK-NEXT: b.le [[B2:LBB[0-9]+_[0-9]+]]
+
+; CHECK-NEXT: ; BB#1: ; %b3
+; CHECK: ldr [[LOAD:w[0-9]+]]
+; CHECK: cbz [[LOAD]], [[SKIP_LONG_B:LBB[0-9]+_[0-9]+]]
+; CHECK-NEXT: b [[B8:LBB[0-9]+_[0-9]+]]
+
+; CHECK-NEXT: [[SKIP_LONG_B]]:
+; CHECK-NEXT: b [[B7:LBB[0-9]+_[0-9]+]]
+
+; CHECK-NEXT: [[B2]]: ; %b2
+; CHECK: mov w{{[0-9]+}}, #93
+; CHECK: bl _extfunc
+; CHECK: cbz w{{[0-9]+}}, [[B7]]
+
+; CHECK-NEXT: [[B8]]: ; %b8
+; CHECK-NEXT: ret
+
+; CHECK-NEXT: [[B7]]: ; %b7
+; CHECK: mov w{{[0-9]+}}, #13
+; CHECK: b _extfunc
+define void @split_block_no_fallthrough(i64 %val) #0 {
+bb:
+  %c0 = icmp sgt i64 %val, -5
+  br i1 %c0, label %b3, label %b2
+
+b2:
+  %v0 = tail call i32 @extfunc(i32 93)
+  %c1 = icmp eq i32 %v0, 0
+  br i1 %c1, label %b7, label %b8
+
+b3:
+  %v1 = load volatile i32, i32* undef, align 4
+  %c2 = icmp eq i32 %v1, 0
+  br i1 %c2, label %b7, label %b8
+
+b7:
+  %tmp1 = tail call i32 @extfunc(i32 13)
+  ret void
+
+b8:
+  ret void
+}
+
+declare i32 @extfunc(i32) #0
+
+attributes #0 = { nounwind }




More information about the llvm-commits mailing list