1; RUN: opt -S -wasm-add-missing-prototypes %s | FileCheck %s 2 3target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 4target triple = "wasm32-unknown-unknown" 5 6; CHECK: @foo_addr = global ptr @foo, align 8 7@foo_addr = global ptr @foo, align 8 8 9; CHECK: @foo_addr_i8 = global ptr @foo, align 8 10@foo_addr_i8 = global ptr @foo, align 8 11 12; CHECK-LABEL: @call_foo 13; CHECK: %call = call i64 @foo(i32 42) 14define void @call_foo(i32 %a) { 15 %call = call i64 @foo(i32 42) 16 ret void 17} 18 19; CHECK-LABEL: @call_foo_ptr 20; CHECK-NEXT: %call = call i64 @foo(i32 43) 21define i64 @call_foo_ptr(i32 %a) { 22 %call = call i64 (i32) @foo(i32 43) 23 ret i64 %call 24} 25 26; CHECK-LABEL: @to_intptr_inst 27; CHECK-NEXT: ret ptr @foo 28define ptr @to_intptr_inst() { 29 ret ptr @foo 30} 31 32; CHECK-LABEL: @to_intptr_constexpr 33; CHECK: ret ptr @foo 34define ptr @to_intptr_constexpr() { 35 ret ptr @foo 36} 37 38; CHECK-LABEL: @null_compare 39; CHECK: %cmp = icmp eq ptr @foo, null 40; CHECK: br i1 %cmp, label %if.then, label %if.end 41define i8 @null_compare() { 42 %cmp = icmp eq ptr @foo, null 43 br i1 %cmp, label %if.then, label %if.end 44if.then: 45 ret i8 0 46if.end: 47 ret i8 1 48} 49 50; CHECK-LABEL: @as_paramater 51; CHECK: call void @func_param(ptr @foo) 52define void @as_paramater() { 53 call void @func_param(ptr @foo) 54 ret void 55} 56 57; Check if a sret parameter works in a no-prototype function. 58; CHECK-LABEL: @sret_param 59; CHECK: call void @make_struct_foo(ptr sret(%struct.foo) %foo) 60%struct.foo = type { i32, i32 } 61declare void @make_struct_foo(ptr sret(%struct.foo), ...) #1 62define void @sret_param() { 63 %foo = alloca %struct.foo, align 4 64 call void @make_struct_foo(ptr sret(%struct.foo) %foo) 65 ret void 66} 67 68declare void @func_param(ptr) 69 70; CHECK: declare void @func_not_called() 71declare void @func_not_called(...) #1 72 73; CHECK: declare extern_weak i64 @foo(i32) 74declare extern_weak i64 @foo(...) #1 75 76; CHECK-NOT: attributes {{.*}} = { {{.*}}"no-prototype"{{.*}} } 77attributes #1 = { "no-prototype" } 78