1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00
llvm-mirror/test/CodeGen/PowerPC/pr20442.ll
Ehsan Amiri db43217a24 Adding -verify-machineinstrs option to PowerPC tests
Currently we have a number of tests that fail with -verify-machineinstrs.
To detect this cases earlier we add the option to the testcases with the
exception of tests that will currently fail with this option. PR 27456 keeps
track of this failures.

No code review, as discussed with Hal Finkel.

llvm-svn: 277624
2016-08-03 18:17:35 +00:00

80 lines
3.2 KiB
LLVM

; RUN: llc -verify-machineinstrs -mcpu=pwr7 < %s | FileCheck %s
target datalayout = "E-m:e-p:32:32-i64:64-n32"
target triple = "powerpc-unknown-linux-gnu"
; This code would cause code generation like this after PPCCTRLoops ran:
; %indvar = phi i32 [ 0, %for.body ], [ %indvar.next, %if.then6 ]
; %j.1.ph13 = phi i32 [ %j.110, %if.then6 ], [ 0, %for.body ], [ 0, %for.body ]
; %c.0.ph12 = phi i32 [ %dec, %if.then6 ], [ %2, %for.body ], [ %2, %for.body ]
; which would fail verification because the created induction variable does not
; have as many predecessor entries as the other PHIs.
; CHECK-LABEL: @fn1
; CHECK: mtctr
%struct.anon = type { i32 }
%struct.anon.0 = type { i32 }
@b = common global %struct.anon* null, align 4
@a = common global %struct.anon.0* null, align 4
; Function Attrs: nounwind readonly uwtable
define i32 @fn1() #0 {
entry:
%0 = load %struct.anon*, %struct.anon** @b, align 4
%1 = ptrtoint %struct.anon* %0 to i32
%cmp = icmp sgt %struct.anon* %0, null
%2 = load %struct.anon.0*, %struct.anon.0** @a, align 4
br i1 %cmp, label %for.bodythread-pre-split, label %if.end8
for.bodythread-pre-split: ; preds = %entry
%aclass = getelementptr inbounds %struct.anon.0, %struct.anon.0* %2, i32 0, i32 0
%.pr = load i32, i32* %aclass, align 4
br label %for.body
for.body: ; preds = %for.bodythread-pre-split, %for.body
switch i32 %.pr, label %for.body [
i32 0, label %while.body.lr.ph.preheader
i32 2, label %while.body.lr.ph.preheader
]
while.body.lr.ph.preheader: ; preds = %for.body, %for.body
br label %while.body.lr.ph
while.body.lr.ph: ; preds = %while.body.lr.ph.preheader, %if.then6
%j.1.ph13 = phi i32 [ %j.110.lcssa, %if.then6 ], [ 0, %while.body.lr.ph.preheader ]
%c.0.ph12 = phi i32 [ %dec, %if.then6 ], [ %1, %while.body.lr.ph.preheader ]
br label %while.body
while.cond: ; preds = %while.body
%cmp2 = icmp slt i32 %inc7, %c.0.ph12
br i1 %cmp2, label %while.body, label %if.end8.loopexit
while.body: ; preds = %while.body.lr.ph, %while.cond
%j.110 = phi i32 [ %j.1.ph13, %while.body.lr.ph ], [ %inc7, %while.cond ]
%aclass_index = getelementptr inbounds %struct.anon, %struct.anon* %0, i32 %j.110, i32 0
%3 = load i32, i32* %aclass_index, align 4
%aclass5 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %2, i32 %3, i32 0
%4 = load i32, i32* %aclass5, align 4
%tobool = icmp eq i32 %4, 0
%inc7 = add nsw i32 %j.110, 1
br i1 %tobool, label %while.cond, label %if.then6
if.then6: ; preds = %while.body
%j.110.lcssa = phi i32 [ %j.110, %while.body ]
%dec = add nsw i32 %c.0.ph12, -1
%cmp29 = icmp slt i32 %j.110.lcssa, %dec
br i1 %cmp29, label %while.body.lr.ph, label %if.end8.loopexit17
if.end8.loopexit: ; preds = %while.cond
br label %if.end8
if.end8.loopexit17: ; preds = %if.then6
br label %if.end8
if.end8: ; preds = %if.end8.loopexit17, %if.end8.loopexit, %entry
ret i32 undef
}
attributes #0 = { nounwind readonly uwtable }