diff options
Diffstat (limited to 'llvm/test/CodeGen/WebAssembly/phi.ll')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/phi.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/phi.ll b/llvm/test/CodeGen/WebAssembly/phi.ll index 13fb5ebc530..24cab2f6607 100644 --- a/llvm/test/CodeGen/WebAssembly/phi.ll +++ b/llvm/test/CodeGen/WebAssembly/phi.ll @@ -8,6 +8,8 @@ target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128" target triple = "wasm32-unknown-unknown" +; Basic phi triangle. + ; CHECK-LABEL: test0 ; CHECK: (setlocal [[REG:@.*]] (argument 0)) ; CHECK: (setlocal [[REG]] (sdiv [[REG]] {{.*}})) @@ -23,3 +25,27 @@ done: %s = phi i32 [ %a, %true ], [ %p, %entry ] ret i32 %s } + +; Swap phis. + +; CHECK-LABEL: test1 +; CHECK: BB0_1: +; CHECK: (setlocal [[REG0:@.*]] [[REG1:@.*]]) +; CHECK: (setlocal [[REG1]] [[REG2:@.*]]) +; CHECK: (setlocal [[REG2]] [[REG0]]) +define i32 @test1(i32 %n) { +entry: + br label %loop + +loop: + %a = phi i32 [ 0, %entry ], [ %b, %loop ] + %b = phi i32 [ 1, %entry ], [ %a, %loop ] + %i = phi i32 [ 0, %entry ], [ %i.next, %loop ] + + %i.next = add i32 %i, 1 + %t = icmp slt i32 %i.next, %n + br i1 %t, label %loop, label %exit + +exit: + ret i32 %a +} |