Skip to content

Commit

Permalink
[SystemZ] Fix trap issue and enable expensive checks.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
JonPsson committed Jun 23, 2017
1 parent 5b66dfb commit a550fda
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 18 deletions.
9 changes: 3 additions & 6 deletions lib/Target/SystemZ/SystemZInstrInfo.td
Original file line number Diff line number Diff line change
Expand Up @@ -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>;
Expand Down
2 changes: 0 additions & 2 deletions lib/Target/SystemZ/SystemZTargetMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ class SystemZTargetMachine : public LLVMTargetMachine {
}

bool targetSchedulesPostRAScheduling() const override { return true; };

bool isMachineVerifierClean() const override { return false; }
};

} // end namespace llvm
Expand Down
5 changes: 4 additions & 1 deletion test/CodeGen/Generic/llc-start-stop.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
27 changes: 20 additions & 7 deletions test/CodeGen/Generic/print-machineinstrs.ll
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions test/CodeGen/SystemZ/trap-02.ll
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit a550fda

Please sign in to comment.