Wouter van Oortmerssen | a7be375 | 2018-08-13 23:12:49 +0000 | [diff] [blame] | 1 | ; RUN: llc -o - %s -asm-verbose=false | FileCheck %s |
Dan Gohman | e81021a | 2016-11-08 19:40:38 +0000 | [diff] [blame] | 2 | target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" |
Sam Clegg | a590800 | 2018-05-10 17:49:11 +0000 | [diff] [blame] | 3 | target triple = "wasm32-unknown-unknown" |
Dan Gohman | e81021a | 2016-11-08 19:40:38 +0000 | [diff] [blame] | 4 | |
| 5 | ; Test that stackified IMPLICIT_DEF instructions are converted into |
| 6 | ; CONST_I32 to provide an explicit push. |
| 7 | |
| 8 | ; CHECK: br_if 2, |
| 9 | ; CHECK: i32.const $push[[L0:[0-9]+]]=, 0{{$}} |
| 10 | ; CHECK-NEXT: return $pop[[L0]]{{$}} |
| 11 | define i1 @f() { |
| 12 | %a = xor i1 0, 0 |
| 13 | switch i1 %a, label %C [ |
| 14 | i1 0, label %A |
| 15 | i1 1, label %B |
| 16 | ] |
| 17 | |
| 18 | A: |
| 19 | %b = xor i1 0, 0 |
| 20 | br label %X |
| 21 | |
| 22 | B: |
| 23 | %c = xor i1 0, 0 |
| 24 | br i1 %c, label %D, label %X |
| 25 | |
| 26 | C: |
| 27 | %d = icmp slt i32 0, 0 |
| 28 | br i1 %d, label %G, label %F |
| 29 | |
| 30 | D: |
| 31 | %e = xor i1 0, 0 |
| 32 | br i1 %e, label %E, label %X |
| 33 | |
| 34 | E: |
| 35 | %f = xor i1 0, 0 |
| 36 | br label %X |
| 37 | |
| 38 | F: |
| 39 | %g = xor i1 0, 0 |
| 40 | br label %G |
| 41 | |
| 42 | G: |
| 43 | %h = phi i1 [ undef, %C ], [ false, %F ] |
| 44 | br label %X |
| 45 | |
| 46 | X: |
| 47 | %i = phi i1 [ true, %A ], [ true, %B ], [ true, %D ], [ true, %E ], [ %h, %G ] |
| 48 | ret i1 %i |
| 49 | } |
| 50 | |