blob: c8b34fd75f0763fd4545664959d9849caa4222c1 [file] [log] [blame]
Justin Lebardf04d2a2016-02-12 21:01:33 +00001; RUN: opt -S -loop-rotate < %s | FileCheck %s
2
3@e = global i32 10
4
5declare void @f1(i32) convergent
6declare void @f2(i32)
7
8; The call to f1 in the loop header shouldn't be duplicated (meaning, loop
9; rotation shouldn't occur), because f1 is convergent.
10
11; CHECK: call void @f1
12; CHECK-NOT: call void @f1
13
14define void @test(i32 %x) {
15entry:
16 br label %loop
17
18loop:
19 %n.phi = phi i32 [ %n, %loop.fin ], [ 0, %entry ]
20 call void @f1(i32 %n.phi)
21 %cond = icmp eq i32 %n.phi, %x
22 br i1 %cond, label %exit, label %loop.fin
23
24loop.fin:
25 %n = add i32 %n.phi, 1
26 call void @f2(i32 %n)
27 br label %loop
28
29exit:
30 ret void
31}