[llvm] r269428 - [llc] New diagnostic handler

Renato Golin via llvm-commits llvm-commits at lists.llvm.org
Fri May 13 08:37:47 PDT 2016


Author: rengolin
Date: Fri May 13 10:37:46 2016
New Revision: 269428

URL: http://llvm.org/viewvc/llvm-project?rev=269428&view=rev
Log:
[llc] New diagnostic handler

Without a diagnostic handler installed, llc's behaviour is to exit on the first
error that it encounters. This is very different from the behaviour of clang
and other front ends, which try to gather as many errors as possible before
exiting.

This commit adds a diagnostic handler to llc, allowing it to find and report
more than one error. The old behaviour is preserved under a flag (-exit-on-error).

Some of the tests fail with the new diagnostic handler, so they have to use the
new flag in order to run under the previous behaviour. Some of these are known
bugs, others need further investigation. Ideally, we should fix the tests and
remove the flag at some point in the future.

Patch by Diana Picus.

Modified:
    llvm/trunk/include/llvm/IR/DiagnosticInfo.h
    llvm/trunk/include/llvm/IR/LLVMContext.h
    llvm/trunk/lib/IR/LLVMContext.cpp
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-I.ll
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-J.ll
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-K.ll
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-L.ll
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-M.ll
    llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-N.ll
    llvm/trunk/test/CodeGen/AMDGPU/call.ll
    llvm/trunk/test/CodeGen/AMDGPU/dynamic_stackalloc.ll
    llvm/trunk/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll
    llvm/trunk/test/CodeGen/AMDGPU/private-memory-broken.ll
    llvm/trunk/test/CodeGen/AMDGPU/promote-alloca-bitcast-function.ll
    llvm/trunk/test/CodeGen/ARM/2012-09-25-InlineAsmScalarToVectorConv2.ll
    llvm/trunk/test/CodeGen/BPF/many_args1.ll
    llvm/trunk/test/CodeGen/BPF/many_args2.ll
    llvm/trunk/test/CodeGen/BPF/struct_ret1.ll
    llvm/trunk/test/CodeGen/BPF/struct_ret2.ll
    llvm/trunk/test/CodeGen/MIR/Generic/invalid-jump-table-kind.mir
    llvm/trunk/test/CodeGen/MIR/Generic/llvm-ir-error-reported.mir
    llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-function.mir
    llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-name.mir
    llvm/trunk/test/CodeGen/MIR/Generic/machine-function-redefinition-error.mir
    llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir
    llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir
    llvm/trunk/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir
    llvm/trunk/test/CodeGen/PowerPC/crbit-asm-disabled.ll
    llvm/trunk/test/CodeGen/PowerPC/vec-asm-disabled.ll
    llvm/trunk/test/CodeGen/X86/asm-reject-reg-type-mismatch.ll
    llvm/trunk/tools/llc/llc.cpp

Modified: llvm/trunk/include/llvm/IR/DiagnosticInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DiagnosticInfo.h?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/DiagnosticInfo.h (original)
+++ llvm/trunk/include/llvm/IR/DiagnosticInfo.h Fri May 13 10:37:46 2016
@@ -34,7 +34,7 @@ class Module;
 class SMDiagnostic;
 
 /// \brief Defines the different supported severity of a diagnostic.
-enum DiagnosticSeverity {
+enum DiagnosticSeverity : char {
   DS_Error,
   DS_Warning,
   DS_Remark,

Modified: llvm/trunk/include/llvm/IR/LLVMContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/LLVMContext.h?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/LLVMContext.h (original)
+++ llvm/trunk/include/llvm/IR/LLVMContext.h Fri May 13 10:37:46 2016
@@ -29,6 +29,7 @@ class MDString;
 class DICompositeType;
 class SMDiagnostic;
 class DiagnosticInfo;
+enum DiagnosticSeverity : char;
 template <typename T> class SmallVectorImpl;
 class Function;
 class DebugLoc;
@@ -172,6 +173,10 @@ public:
   /// setDiagnosticContext.
   void *getDiagnosticContext() const;
 
+  /// \brief Get the prefix that should be printed in front of a diagnostic of
+  ///        the given \p Severity
+  static const char *getDiagnosticMessagePrefix(DiagnosticSeverity Severity);
+
   /// \brief Report a message to the currently installed diagnostic handler.
   ///
   /// This function returns, in particular in the case of error reporting

Modified: llvm/trunk/lib/IR/LLVMContext.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContext.cpp?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/lib/IR/LLVMContext.cpp (original)
+++ llvm/trunk/lib/IR/LLVMContext.cpp Fri May 13 10:37:46 2016
@@ -231,7 +231,8 @@ static bool isDiagnosticEnabled(const Di
   return true;
 }
 
-static const char *getDiagnosticMessagePrefix(DiagnosticSeverity Severity) {
+const char *
+LLVMContext::getDiagnosticMessagePrefix(DiagnosticSeverity Severity) {
   switch (Severity) {
   case DS_Error:
     return "error";

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-I.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-I.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-I.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-I.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-J.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-J.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-J.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-J.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-K.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-K.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-K.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-K.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-L.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-L.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-L.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-L.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-M.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-M.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-M.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-M.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-N.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-N.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-N.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/arm64-inline-asm-error-N.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=arm64 < %s  2> %t
+; RUN: not llc -march=arm64 -exit-on-error < %s  2> %t
 ; RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
 
 ; Check for at least one invalid constant.

Modified: llvm/trunk/test/CodeGen/AMDGPU/call.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/call.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/call.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/call.ll Fri May 13 10:37:46 2016
@@ -1,6 +1,6 @@
-; RUN: not llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s 2>&1 | FileCheck %s
-; RUN: not llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s 2>&1 | FileCheck %s
-; RUN: not llc -march=r600 -mcpu=cypress < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -mcpu=SI -verify-machineinstrs -exit-on-error < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -mcpu=tonga -verify-machineinstrs -exit-on-error < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=r600 -mcpu=cypress -exit-on-error < %s 2>&1 | FileCheck %s
 
 ; CHECK: in function test_call_external{{.*}}: unsupported call to function external_function
 

Modified: llvm/trunk/test/CodeGen/AMDGPU/dynamic_stackalloc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/dynamic_stackalloc.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/dynamic_stackalloc.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/dynamic_stackalloc.ll Fri May 13 10:37:46 2016
@@ -1,6 +1,6 @@
-; RUN: not llc -march=amdgcn -mcpu=tahiti -mattr=+promote-alloca -verify-machineinstrs < %s 2>&1 | FileCheck %s
-; RUN: not llc -march=amdgcn -mcpu=tahiti -mattr=-promote-alloca -verify-machineinstrs < %s 2>&1 | FileCheck %s
-; RUN: not llc -march=r600 -mcpu=cypress < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -mcpu=tahiti -mattr=+promote-alloca -verify-machineinstrs -exit-on-error < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -mcpu=tahiti -mattr=-promote-alloca -verify-machineinstrs -exit-on-error < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=r600 -mcpu=cypress -exit-on-error < %s 2>&1 | FileCheck %s
 
 ; CHECK: in function test_dynamic_stackalloc{{.*}}: unsupported dynamic alloca
 

Modified: llvm/trunk/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/no-hsa-graphics-shaders.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=amdgcn -mtriple=amdgcn-unknown-amdhsa < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -mtriple=amdgcn-unknown-amdhsa -exit-on-error < %s 2>&1 | FileCheck %s
 
 ; CHECK: in function pixel_s{{.*}}: unsupported non-compute shaders with HSA
 define amdgpu_ps void @pixel_shader() #0 {

Modified: llvm/trunk/test/CodeGen/AMDGPU/private-memory-broken.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/private-memory-broken.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/private-memory-broken.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/private-memory-broken.ll Fri May 13 10:37:46 2016
@@ -1,5 +1,5 @@
-; RUN: not llc -verify-machineinstrs -march=amdgcn -mcpu=SI %s -o /dev/null 2>&1 | FileCheck %s
-; RUN: not llc -verify-machineinstrs -march=amdgcn -mcpu=tonga %s -o /dev/null 2>&1 | FileCheck %s
+; RUN: not llc -verify-machineinstrs -march=amdgcn -mcpu=SI -exit-on-error %s -o /dev/null 2>&1 | FileCheck %s
+; RUN: not llc -verify-machineinstrs -march=amdgcn -mcpu=tonga -exit-on-error %s -o /dev/null 2>&1 | FileCheck %s
 
 ; Make sure promote alloca pass doesn't crash
 

Modified: llvm/trunk/test/CodeGen/AMDGPU/promote-alloca-bitcast-function.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/promote-alloca-bitcast-function.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/promote-alloca-bitcast-function.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/promote-alloca-bitcast-function.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=amdgcn < %s 2>&1 | FileCheck %s
+; RUN: not llc -march=amdgcn -exit-on-error < %s 2>&1 | FileCheck %s
 
 ; Make sure that AMDGPUPromoteAlloca doesn't crash if the called
 ; function is a constantexpr cast of a function.

Modified: llvm/trunk/test/CodeGen/ARM/2012-09-25-InlineAsmScalarToVectorConv2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2012-09-25-InlineAsmScalarToVectorConv2.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/2012-09-25-InlineAsmScalarToVectorConv2.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/2012-09-25-InlineAsmScalarToVectorConv2.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - 2>&1 | FileCheck %s
+; RUN: not llc -mtriple=arm-eabi -mcpu=cortex-a8 -exit-on-error %s -o - 2>&1 | FileCheck %s
 
 ; Check for error message:
 ; CHECK: scalar-to-vector conversion failed, possible invalid constraint for vector type

Modified: llvm/trunk/test/CodeGen/BPF/many_args1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/BPF/many_args1.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/BPF/many_args1.ll (original)
+++ llvm/trunk/test/CodeGen/BPF/many_args1.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=bpf < %s 2> %t1
+; RUN: not llc -march=bpf -exit-on-error < %s 2> %t1
 ; RUN: FileCheck %s < %t1
 ; CHECK: too many args
 

Modified: llvm/trunk/test/CodeGen/BPF/many_args2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/BPF/many_args2.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/BPF/many_args2.ll (original)
+++ llvm/trunk/test/CodeGen/BPF/many_args2.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=bpf < %s 2> %t1
+; RUN: not llc -march=bpf -exit-on-error < %s 2> %t1
 ; RUN: FileCheck %s < %t1
 ; CHECK: too many args
 

Modified: llvm/trunk/test/CodeGen/BPF/struct_ret1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/BPF/struct_ret1.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/BPF/struct_ret1.ll (original)
+++ llvm/trunk/test/CodeGen/BPF/struct_ret1.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=bpf < %s 2> %t1
+; RUN: not llc -march=bpf -exit-on-error < %s 2> %t1
 ; RUN: FileCheck %s < %t1
 ; CHECK: only integer returns
 

Modified: llvm/trunk/test/CodeGen/BPF/struct_ret2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/BPF/struct_ret2.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/BPF/struct_ret2.ll (original)
+++ llvm/trunk/test/CodeGen/BPF/struct_ret2.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -march=bpf < %s 2> %t1
+; RUN: not llc -march=bpf -exit-on-error < %s 2> %t1
 ; RUN: FileCheck %s < %t1
 ; CHECK: only small returns
 

Modified: llvm/trunk/test/CodeGen/MIR/Generic/invalid-jump-table-kind.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/Generic/invalid-jump-table-kind.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/invalid-jump-table-kind.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/Generic/invalid-jump-table-kind.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 
 --- |
 

Modified: llvm/trunk/test/CodeGen/MIR/Generic/llvm-ir-error-reported.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/Generic/llvm-ir-error-reported.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/llvm-ir-error-reported.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/Generic/llvm-ir-error-reported.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 # This test ensures an error is reported if the embedded LLVM IR contains an
 # error.
 

Modified: llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-function.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-function.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-function.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-function.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 # This test ensures that an error is reported when the mir file has LLVM IR and
 # one of the machine functions has a name that doesn't match any function in
 # the LLVM IR.

Modified: llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-name.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-name.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-name.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/Generic/machine-function-missing-name.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 # This test ensures that an error is reported when a machine function doesn't
 # have a name attribute.
 

Modified: llvm/trunk/test/CodeGen/MIR/Generic/machine-function-redefinition-error.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/Generic/machine-function-redefinition-error.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/machine-function-redefinition-error.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/Generic/machine-function-redefinition-error.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 # This test ensures that the machine function errors are reported correctly.
 
 ---

Modified: llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 
 --- |
 

Modified: llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 
 --- |
 

Modified: llvm/trunk/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 --- |
 
   define i32 @test(i32 %a) {

Modified: llvm/trunk/test/CodeGen/PowerPC/crbit-asm-disabled.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/crbit-asm-disabled.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/crbit-asm-disabled.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/crbit-asm-disabled.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -mcpu=pwr7 -o /dev/null %s 2>&1 | FileCheck %s
+; RUN: not llc -mcpu=pwr7 -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 target datalayout = "E-m:e-i64:64-n32:64"
 target triple = "powerpc64-unknown-linux-gnu"
 

Modified: llvm/trunk/test/CodeGen/PowerPC/vec-asm-disabled.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/vec-asm-disabled.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/vec-asm-disabled.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/vec-asm-disabled.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -mcpu=pwr7 -o /dev/null %s 2>&1 | FileCheck %s
+; RUN: not llc -mcpu=pwr7 -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 target datalayout = "E-m:e-i64:64-n32:64"
 target triple = "powerpc64-unknown-linux-gnu"
 

Modified: llvm/trunk/test/CodeGen/X86/asm-reject-reg-type-mismatch.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/asm-reject-reg-type-mismatch.ll?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/asm-reject-reg-type-mismatch.ll (original)
+++ llvm/trunk/test/CodeGen/X86/asm-reject-reg-type-mismatch.ll Fri May 13 10:37:46 2016
@@ -1,4 +1,4 @@
-; RUN: not llc -o /dev/null %s 2>&1 | FileCheck %s
+; RUN: not llc -exit-on-error -o /dev/null %s 2>&1 | FileCheck %s
 target triple = "x86_64--"
 
 ; CHECK: error: couldn't allocate output register for constraint '{ax}'

Modified: llvm/trunk/tools/llc/llc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=269428&r1=269427&r2=269428&view=diff
==============================================================================
--- llvm/trunk/tools/llc/llc.cpp (original)
+++ llvm/trunk/tools/llc/llc.cpp Fri May 13 10:37:46 2016
@@ -25,6 +25,8 @@
 #include "llvm/CodeGen/MachineModuleInfo.h"
 #include "llvm/CodeGen/TargetPassConfig.h"
 #include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/IR/DiagnosticPrinter.h"
 #include "llvm/IR/IRPrintingPasses.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/LegacyPassManager.h"
@@ -111,6 +113,11 @@ static cl::opt<bool> DiscardValueNames(
     cl::desc("Discard names from Value (other than GlobalValue)."),
     cl::init(false), cl::Hidden);
 
+static cl::opt<bool> ExitOnError(
+    "exit-on-error",
+    cl::desc("Exit as soon as an error is encountered."),
+    cl::init(false), cl::Hidden);
+
 static int compileModule(char **, LLVMContext &);
 
 static std::unique_ptr<tool_output_file>
@@ -181,6 +188,17 @@ GetOutputStream(const char *TargetName,
   return FDOut;
 }
 
+static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context) {
+  bool *HasError = static_cast<bool *>(Context);
+  if (DI.getSeverity() == DS_Error)
+    *HasError = true;
+
+  DiagnosticPrinterRawOStream DP(errs());
+  errs() << LLVMContext::getDiagnosticMessagePrefix(DI.getSeverity()) << ": ";
+  DI.print(DP);
+  errs() << "\n";
+}
+
 // main - Entry point for the llc compiler.
 //
 int main(int argc, char **argv) {
@@ -215,6 +233,12 @@ int main(int argc, char **argv) {
 
   Context.setDiscardValueNames(DiscardValueNames);
 
+  // Set a diagnostic handler that doesn't exit on the first error
+  if (!ExitOnError) {
+    bool HasError = false;
+    Context.setDiagnosticHandler(DiagnosticHandler, &HasError);
+  }
+
   // Compile the module TimeCompilations times to give better compile time
   // metrics.
   for (unsigned I = TimeCompilations; I; --I)
@@ -441,6 +465,12 @@ static int compileModule(char **argv, LL
 
     PM.run(*M);
 
+    if (!ExitOnError) {
+      auto HasError = *static_cast<bool *>(Context.getDiagnosticContext());
+      if (HasError)
+        return 1;
+    }
+
     // Compare the two outputs and make sure they're the same
     if (CompileTwice) {
       if (Buffer.size() != CompileTwiceBuffer.size() ||




More information about the llvm-commits mailing list