1; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -verify-machineinstrs | FileCheck %s 2; RUN: llc < %s -asm-verbose=false -fast-isel -verify-machineinstrs | FileCheck %s 3 4; Test that FastISel does not generate instructions with NoReg 5 6target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 7target triple = "wasm32-unknown-unknown" 8 9; CHECK: i32.const $push0=, 0 10define hidden i32 @a() #0 { 11entry: 12 ret i32 zext (i1 icmp eq (void (...)* inttoptr (i32 10 to void (...)*), void (...)* null) to i32) 13} 14 15; CHECK: i32.const $push0=, 1 16; CHECK: br_if 0, $pop0 17define hidden i32 @b() #0 { 18entry: 19 br i1 icmp eq (void (...)* inttoptr (i32 10 to void (...)*), void (...)* null), label %a, label %b 20a: 21 unreachable 22b: 23 ret i32 0 24} 25 26; CHECK: i32.const $push1=, 0 27; CHECK: i32.const $push2=, 0 28; CHECK: i32.store 0($pop1), $pop2 29define hidden i32 @c() #0 { 30entry: 31 store i32 zext (i1 icmp eq (void (...)* inttoptr (i32 10 to void (...)*), void (...)* null) to i32), i32* inttoptr (i32 0 to i32 *) 32 ret i32 0 33} 34 35; CHECK: i32.const {{.*}}, addr@FUNCTION 36; CHECK: i32.const {{.*}}, 24 37; CHECK: i32.shl 38; CHECK: i32.const {{.*}}, 24 39; CHECK: i32.shr_s 40; CHECK: i32.const {{.*}}, 64 41; CHECK: br_if 0, $pop0 42define hidden i32 @d() #0 { 43entry: 44 %t = icmp slt i8 ptrtoint (void ()* @addr to i8), 64 45 br i1 %t, label %a, label %b 46a: 47 unreachable 48b: 49 ret i32 0 50} 51 52; CHECK: i32.const {{.*}}, addr@FUNCTION 53; CHECK: i32.const {{.*}}, 255 54; CHECK: i32.and 55; CHECK: i32.const {{.*}}, 64 56; CHECK: br_if 0, $pop0 57define hidden i32 @e() #0 { 58entry: 59 %t = icmp ult i8 ptrtoint (void ()* @addr to i8), 64 60 br i1 %t, label %a, label %b 61a: 62 unreachable 63b: 64 ret i32 0 65} 66 67; CHECK: i32.const {{.*}}, addr@FUNCTION 68; CHECK: i32.const {{.*}}, 24 69; CHECK: i32.shl 70; CHECK: i32.const {{.*}}, 24 71; CHECK: i32.shr_s 72define hidden i32 @f() #0 { 73entry: 74 %t = sext i8 ptrtoint (void ()* @addr to i8) to i32 75 ret i32 %t 76} 77 78; CHECK: i32.const {{.*}}, addr@FUNCTION 79; CHECK: i32.const {{.*}}, 255 80; CHECK: i32.and 81define hidden i32 @g() #0 { 82entry: 83 %t = zext i8 ptrtoint (void ()* @addr to i8) to i32 84 ret i32 %t 85} 86 87declare void @addr() 88 89attributes #0 = { noinline optnone } 90