]> granicus.if.org Git - llvm/commitdiff
[SystemZ] Fix trap issue and enable expensive checks.
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>
Fri, 23 Jun 2017 14:30:46 +0000 (14:30 +0000)
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>
Fri, 23 Jun 2017 14:30:46 +0000 (14:30 +0000)
The isBarrier/isTerminator flags have been removed from the SystemZ trap
instructions, so that tests do not fail with EXPENSIVE_CHECKS. This was just
an issue at -O0 and did not affect code output on benchmarks.

(Like Eli pointed out: "targets are split over whether they consider their
"trap" a terminator; x86, AArch64, and NVPTX don't, but ARM, MIPS, PPC, and
SystemZ do. We should probably try to be consistent here.". This is still the
case, although SystemZ has switched sides).

SystemZ now returns true in isMachineVerifierClean() :-)

These Generic tests have been modified so that they can be run with or without
EXPENSIVE_CHECKS: CodeGen/Generic/llc-start-stop.ll and
CodeGen/Generic/print-machineinstrs.ll

Review: Ulrich Weigand, Simon Pilgrim, Eli Friedman
https://bugs.llvm.org/show_bug.cgi?id=33047
https://reviews.llvm.org/D34143

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306106 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/SystemZ/SystemZInstrInfo.td
lib/Target/SystemZ/SystemZTargetMachine.h
test/CodeGen/Generic/llc-start-stop.ll
test/CodeGen/Generic/print-machineinstrs.ll
test/CodeGen/SystemZ/trap-02.ll

index fa5ecdd8524333e87ab42253a0d0661e872316b7..fdfa3f891df59d1aad9b0674509fb59c793fdc79 100644 (file)
@@ -189,18 +189,15 @@ let isBranch = 1, isTerminator = 1 in {
 //===----------------------------------------------------------------------===//
 
 // Unconditional trap.
-// FIXME: This trap instruction should be marked as isTerminator, but there is
-// currently a general bug that allows non-terminators to be placed between
-// terminators. Temporarily leave this unmarked until the bug is fixed.
-let isBarrier = 1, hasCtrlDep = 1 in
+let hasCtrlDep = 1 in
   def Trap : Alias<4, (outs), (ins), [(trap)]>;
 
 // Conditional trap.
-let isTerminator = 1, hasCtrlDep = 1, Uses = [CC] in
+let hasCtrlDep = 1, Uses = [CC] in
   def CondTrap : Alias<4, (outs), (ins cond4:$valid, cond4:$R1), []>;
 
 // Fused compare-and-trap instructions.
-let isTerminator = 1, hasCtrlDep = 1 in {
+let hasCtrlDep = 1 in {
   // These patterns work the same way as for compare-and-branch.
   defm CRT   : CmpBranchRRFcPair<"crt",   0xB972, GR32>;
   defm CGRT  : CmpBranchRRFcPair<"cgrt",  0xB960, GR64>;
index eb2f17a2091c3418bf6eb6139537a8944356e332..a10ca64fa6329d3045bc04e3d606980e17ffd21c 100644 (file)
@@ -51,8 +51,6 @@ public:
   }
 
   bool targetSchedulesPostRAScheduling() const override { return true; };
-
-  bool isMachineVerifierClean() const override { return false; }
 };
 
 } // end namespace llvm
index 49407fbb2d8830ac8d36618625fd14ee86724b87..becd1cc453c7a4715af64ed509d5fb36ba77a0e5 100644 (file)
@@ -1,7 +1,10 @@
-; RUN: llc < %s -debug-pass=Structure -stop-after=loop-reduce -o /dev/null 2>&1 | FileCheck %s -check-prefix=STOP-AFTER
+; Note: -verify-machineinstrs is used in order to make this test compatible with EXPENSIVE_CHECKS.
+; RUN: llc < %s -debug-pass=Structure -stop-after=loop-reduce -verify-machineinstrs -o /dev/null 2>&1 \
+; RUN:   | FileCheck %s -check-prefix=STOP-AFTER
 ; STOP-AFTER: -loop-reduce
 ; STOP-AFTER: Dominator Tree Construction
 ; STOP-AFTER: Loop Strength Reduction
+; STOP-AFTER-NEXT: Verify generated machine code
 ; STOP-AFTER-NEXT: MIR Printing Pass
 
 ; RUN: llc < %s -debug-pass=Structure -stop-before=loop-reduce -o /dev/null 2>&1 | FileCheck %s -check-prefix=STOP-BEFORE
index 26bccaae572cbacfb97f13a4c411d6dfa05a2394..b33e0929edc8c9feb929462ed3142ce976a9b79c 100644 (file)
@@ -1,12 +1,25 @@
-; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs=branch-folder -o /dev/null 2>&1 | FileCheck %s
-; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs -o /dev/null 2>&1 | FileCheck %s
-; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs= -o /dev/null 2>&1 | FileCheck %s
+; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs=branch-folder -verify-machineinstrs -o /dev/null 2>&1 \
+; RUN:   | FileCheck %s -check-prefix=PRINT-BRANCH-FOLD
+; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs -verify-machineinstrs -o /dev/null 2>&1 \
+; RUN:   | FileCheck %s -check-prefix=PRINT
+; RUN: llc < %s -O3 -debug-pass=Structure -print-machineinstrs= -verify-machineinstrs -o /dev/null 2>&1 \
+; RUN:   | FileCheck %s -check-prefix=PRINT
+
+; Note: -verify-machineinstrs is used in order to make this test compatible with EXPENSIVE_CHECKS.
 
 define i64 @foo(i64 %a, i64 %b) nounwind {
-; CHECK: -branch-folder  -machineinstr-printer
-; CHECK: Control Flow Optimizer
-; CHECK-NEXT: MachineFunction Printer
-; CHECK: Machine code for function foo:
+; PRINT-BRANCH-FOLD: -branch-folder -machineverifier -machineinstr-printer
+; PRINT-BRANCH-FOLD: Control Flow Optimizer
+; PRINT-BRANCH-FOLD-NEXT: Verify generated machine code
+; PRINT-BRANCH-FOLD-NEXT: MachineFunction Printer
+; PRINT-BRANCH-FOLD: Machine code for function foo:
+
+; PRINT: -branch-folder -machineinstr-printer
+; PRINT: Control Flow Optimizer
+; PRINT-NEXT: MachineFunction Printer
+; PRINT-NEXT: Verify generated machine code
+; PRINT: Machine code for function foo:
+
   %c = add i64 %a, %b
   %d = trunc i64 %c to i32
   %e = zext i32 %d to i64
index 5fdb87c292d72ce9292e4c32ec90896c846f7fe7..fed419f373ec852fd5fbe5b4a3caccd83feddf85 100644 (file)
@@ -47,9 +47,9 @@ if.end:                                           ; preds = %entry
 define i32 @f3(i32 zeroext %a, i32 *%base, i64 %offset) {
 ; CHECK-LABEL: f3:
 ; CHECK: cl %r2, 0(%r{{[0-5]}},%r3)
+; CHECK: lhi %r2, 0
 ; CHECK-LABEL: .Ltmp0
 ; CHECK: jh .Ltmp0+2
-; CHECK: lhi %r2, 0
 ; CHECK: br %r14
 entry:
   %ptr = getelementptr i32, i32 *%base, i64 %offset
@@ -70,9 +70,9 @@ if.end:                                           ; preds = %entry
 define i64 @f4(i64 %a, i64 *%base, i64 %offset) {
 ; CHECK-LABEL: f4:
 ; CHECK: clg %r2, 0(%r{{[0-5]}},%r3)
+; CHECK: lghi %r2, 0
 ; CHECK-LABEL: .Ltmp1
 ; CHECK: jh .Ltmp1+2
-; CHECK: lghi %r2, 0
 ; CHECK: br %r14
 entry:
   %ptr = getelementptr i64, i64 *%base, i64 %offset