xref: /llvm-project/llvm/test/CodeGen/WebAssembly/fast-isel-noreg.ll (revision deab451e7a7f2dff42097049274637052c87eabd)
1; RUN: llc < %s -asm-verbose=false -mcpu=mvp -disable-wasm-fallthrough-return-opt -wasm-keep-registers -verify-machineinstrs | FileCheck %s
2; RUN: llc < %s -asm-verbose=false -mcpu=mvp -wasm-keep-registers -fast-isel -verify-machineinstrs | FileCheck %s
3
4; Test that FastISel does not generate instructions with NoReg
5
6target triple = "wasm32-unknown-unknown"
7
8; CHECK: i32.const {{.*}}, addr
9; CHECK: i32.const {{.*}}, 24
10; CHECK: i32.shl
11; CHECK: i32.const {{.*}}, 24
12; CHECK: i32.shr_s
13; CHECK: i32.const {{.*}}, 64
14; CHECK: i32.lt_s
15; CHECK: i32.const {{.*}}, 1
16; CHECK: i32.and
17; CHECK: i32.eqz
18; CHECK: br_if 0, $pop{{[0-9]+}}
19define hidden i32 @d() #0 {
20entry:
21  %t = icmp slt i8 ptrtoint (ptr @addr to i8), 64
22  br i1 %t, label %a, label %b
23a:
24  unreachable
25b:
26  ret i32 0
27}
28
29; CHECK: i32.const {{.*}}, addr
30; CHECK: i32.const {{.*}}, 255
31; CHECK: i32.and
32; CHECK: i32.const {{.*}}, 64
33; CHECK: i32.lt_u
34; CHECK: i32.const {{.*}}, 1
35; CHECK: i32.and
36; CHECK: i32.eqz
37; CHECK: br_if 0, $pop{{[0-9]+}}
38define hidden i32 @e() #0 {
39entry:
40  %t = icmp ult i8 ptrtoint (ptr @addr to i8), 64
41  br i1 %t, label %a, label %b
42a:
43  unreachable
44b:
45  ret i32 0
46}
47
48; CHECK: i32.const {{.*}}, addr
49; CHECK: i32.const {{.*}}, 24
50; CHECK: i32.shl
51; CHECK: i32.const {{.*}}, 24
52; CHECK: i32.shr_s
53define hidden i32 @f() #0 {
54entry:
55  %t = sext i8 ptrtoint (ptr @addr to i8) to i32
56  ret i32 %t
57}
58
59; CHECK: i32.const {{.*}}, addr
60; CHECK: i32.const {{.*}}, 255
61; CHECK: i32.and
62define hidden i32 @g() #0 {
63entry:
64  %t = zext i8 ptrtoint (ptr @addr to i8) to i32
65  ret i32 %t
66}
67
68declare void @addr()
69
70attributes #0 = { noinline optnone }
71