1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/CodeGen/PowerPC/merge-st-chain-op.ll
Zi Xuan Wu 699d18eb82 [PowerPC] Fix assert from machine verify pass that missing undef register flag
Fix assert about using an undefined physical register in machine instruction verify pass. 
The reason is that register flag undef is missing when doing transformation from If Conversion Pass.

```
Bad machine code: Using an undefined physical register 
- function:    func_65
- basic block: %bb.0 entry (0x10024740738)
- instruction: BCLR killed $cr5lt, implicit $lr8, implicit $rm, implicit undef $x3
- operand 0:   killed $cr5lt
LLVM ERROR: Found 1 machine code errors.
```

There are also other existing testcases with same issue. So I add -verify-machineinstrs option to open verifying.

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

llvm-svn: 348566
2018-12-07 05:25:16 +00:00

42 lines
1.8 KiB
LLVM

; RUN: llc -verify-machineinstrs < %s | FileCheck %s
target datalayout = "E-m:e-i64:64-n32:64"
target triple = "powerpc64-unknown-linux-gnu"
@_ZNSs4_Rep20_S_empty_rep_storageE = external global [0 x i64], align 8
; Function Attrs: nounwind
define void @_ZN5clang7tooling15RefactoringTool10runAndSaveEPNS0_21FrontendActionFactoryE() #0 align 2 {
entry:
br i1 undef, label %_ZN4llvm18IntrusiveRefCntPtrIN5clang13DiagnosticIDsEEC2EPS2_.exit, label %return
; CHECK: @_ZN5clang7tooling15RefactoringTool10runAndSaveEPNS0_21FrontendActionFactoryE
_ZN4llvm18IntrusiveRefCntPtrIN5clang13DiagnosticIDsEEC2EPS2_.exit: ; preds = %entry
%call2 = call noalias i8* @_Znwm() #3
%ref_cnt.i.i = bitcast i8* %call2 to i32*
store <2 x i8*> <i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*), i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*)>, <2 x i8*>* undef, align 8
%IgnoreWarnings.i = getelementptr inbounds i8, i8* %call2, i64 4
%0 = bitcast i8* %IgnoreWarnings.i to i32*
call void @llvm.memset.p0i8.i64(i8* align 8 null, i8 0, i64 48, i1 false) #4
store i32 251658240, i32* %0, align 4
store i256 37662610426935100959726589394453639584271499769928088551424, i256* null, align 8
store i32 1, i32* %ref_cnt.i.i, align 4
unreachable
return: ; preds = %entry
ret void
}
; Function Attrs: nobuiltin
declare noalias i8* @_Znwm() #1
; Function Attrs: nounwind argmemonly
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) #2
attributes #0 = { nounwind "target-cpu"="pwr7" }
attributes #1 = { nobuiltin "target-cpu"="pwr7" }
attributes #2 = { nounwind argmemonly }
attributes #3 = { builtin nounwind }
attributes #4 = { nounwind }