Skip to content

Commit

Permalink
Add placeholder for more extensive verification of psuedo ops
Browse files Browse the repository at this point in the history
This initial patch doesn't actually do much useful. It's just to show where the new code goes. Once this is in, I'll extend the verification logic to check more useful properties.

For those curious, the more complicated version of this patch already found one very suspicious thing.

Differential Revision: https://reviews.llvm.org/D33819

llvm-svn: 304564
  • Loading branch information
preames committed Jun 2, 2017
1 parent 3778c89 commit 94cc4a2
Show file tree
Hide file tree
Showing 14 changed files with 35 additions and 23 deletions.
3 changes: 1 addition & 2 deletions llvm/include/llvm/CodeGen/StackMaps.h
Expand Up @@ -150,7 +150,7 @@ class PatchPointOpers {
/// <StackMaps::ConstantOp>, <num other args>, [other args],
/// [gc values]
class StatepointOpers {
private:
public:
// These values are aboolute offsets into the operands of the statepoint
// instruction.
enum { IDPos, NBytesPos, NCallArgsPos, CallTargetPos, MetaEnd };
Expand All @@ -159,7 +159,6 @@ class StatepointOpers {
// arguments (i.e. the end of the call arguments).
enum { CCOffset = 1, FlagsOffset = 3, NumVMSArgsOffset = 5 };

public:
explicit StatepointOpers(const MachineInstr *MI) : MI(MI) {}

/// Get starting index of non call related arguments
Expand Down
29 changes: 21 additions & 8 deletions llvm/lib/CodeGen/MachineVerifier.cpp
Expand Up @@ -36,6 +36,7 @@
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/StackMaps.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instructions.h"
Expand Down Expand Up @@ -909,17 +910,29 @@ void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
}
}

// Generic loads and stores must have a single MachineMemOperand
// describing that access.
if ((MI->getOpcode() == TargetOpcode::G_LOAD ||
MI->getOpcode() == TargetOpcode::G_STORE) &&
!MI->hasOneMemOperand())
report("Generic instruction accessing memory must have one mem operand",
MI);

StringRef ErrorInfo;
if (!TII->verifyInstruction(*MI, ErrorInfo))
report(ErrorInfo.data(), MI);

// Verify properties of various specific instruction types
switch(MI->getOpcode()) {
default:
break;
case TargetOpcode::G_LOAD:
case TargetOpcode::G_STORE:
// Generic loads and stores must have a single MachineMemOperand
// describing that access.
if (!MI->hasOneMemOperand())
report("Generic instruction accessing memory must have one mem operand",
MI);
break;
case TargetOpcode::STATEPOINT:
if (!MI->getOperand(StatepointOpers::IDPos).isImm() ||
!MI->getOperand(StatepointOpers::NBytesPos).isImm() ||
!MI->getOperand(StatepointOpers::NCallArgsPos).isImm())
report("meta operands to STATEPOINT not constant!", MI);
break;
};
}

void
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-allocas.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s | FileCheck %s
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
; Check that we can lower a use of an alloca both as a deopt value (where the
; exact meaning is up to the consumer of the stackmap) and as an explicit spill
; slot used for GC.
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-call-lowering.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s | FileCheck %s
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
; This file contains a collection of basic tests to ensure we didn't
; screw up normal call lowering when there are no deopt or gc arguments.

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-far-call.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s | FileCheck %s
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
; Test to check that Statepoints with X64 far-immediate targets
; are lowered correctly to an indirect call via a scratch register.

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-forward.ll
@@ -1,5 +1,5 @@
; RUN: opt -O3 -S < %s | FileCheck --check-prefix=CHECK-OPT %s
; RUN: llc < %s | FileCheck --check-prefix=CHECK-LLC %s
; RUN: llc -verify-machineinstrs < %s | FileCheck --check-prefix=CHECK-LLC %s
; These tests are targetted at making sure we don't retain information
; about memory which contains potential gc references across a statepoint.
; They're carefully written to only outlaw forwarding of references.
Expand Down
@@ -1,4 +1,4 @@
; RUN: llc < %s | FileCheck %s
; RUN: llc -verify-machineinstrs < %s | FileCheck %s
; This file contains a collection of basic tests to ensure we didn't
; screw up normal call lowering when a statepoint is a GC transition.

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-invoke.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s 2>&1 | FileCheck %s
; RUN: llc -verify-machineinstrs < %s 2>&1 | FileCheck %s

target triple = "x86_64-pc-linux-gnu"

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-live-in.ll
@@ -1,4 +1,4 @@
; RUN: llc -O3 < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -O3 < %s | FileCheck %s
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.11.0"

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-stack-usage.ll
@@ -1,4 +1,4 @@
; RUN: llc -stack-symbol-ordering=0 < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -stack-symbol-ordering=0 < %s | FileCheck %s

target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/X86/statepoint-stackmap-format.ll
@@ -1,5 +1,5 @@
; RUN: llc < %s -stack-symbol-ordering=0 -mtriple="x86_64-pc-linux-gnu" | FileCheck %s
; RUN: llc < %s -stack-symbol-ordering=0 -mtriple="x86_64-pc-unknown-elf" | FileCheck %s
; RUN: llc < %s -verify-machineinstrs -stack-symbol-ordering=0 -mtriple="x86_64-pc-linux-gnu" | FileCheck %s
; RUN: llc < %s -verify-machineinstrs -stack-symbol-ordering=0 -mtriple="x86_64-pc-unknown-elf" | FileCheck %s

; This test is a sanity check to ensure statepoints are generating StackMap
; sections correctly. This is not intended to be a rigorous test of the
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-uniqueing.ll
@@ -1,4 +1,4 @@
; RUN: llc < %s | FileCheck %s
; RUN: llc -verify-machineinstrs < %s | FileCheck %s

; Checks for a crash we had when two gc.relocate calls would
; relocating identical values
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-vector-bad-spill.ll
@@ -1,4 +1,4 @@
; RUN: llc -O3 < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -O3 < %s | FileCheck %s

; This is checking for a crash.

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/statepoint-vector.ll
@@ -1,4 +1,4 @@
; RUN: llc -stack-symbol-ordering=0 -mcpu=nehalem -debug-only=stackmaps < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -stack-symbol-ordering=0 -mcpu=nehalem -debug-only=stackmaps < %s | FileCheck %s
; REQUIRES: asserts

target triple = "x86_64-pc-linux-gnu"
Expand Down

0 comments on commit 94cc4a2

Please sign in to comment.