; RUN: opt -mtriple=amdgcn-- -inline -S -amdgpu-inline-max-bb=2 %s | FileCheck %s --check-prefix=NOINL ; RUN: opt -mtriple=amdgcn-- -inline -S -amdgpu-inline-max-bb=3 %s | FileCheck %s --check-prefix=INL ; RUN: opt -mtriple=amdgcn-- -passes=inline -S -amdgpu-inline-max-bb=2 %s | FileCheck %s --check-prefix=NOINL ; RUN: opt -mtriple=amdgcn-- -passes=inline -S -amdgpu-inline-max-bb=3 %s | FileCheck %s --check-prefix=INL define i32 @callee(i32 %x) { entry: %cc = icmp eq i32 %x, 1 br i1 %cc, label %ret_res, label %mulx mulx: %mul1 = mul i32 %x, %x %mul2 = mul i32 %mul1, %x %mul3 = mul i32 %mul1, %mul2 %mul4 = mul i32 %mul3, %mul2 %mul5 = mul i32 %mul4, %mul3 br label %ret_res ret_res: %r = phi i32 [ %mul5, %mulx ], [ %x, %entry ] ret i32 %r } ; INL-LABEL: @caller ; NOINL-LABEL: @caller ; INL: mul i32 ; INL-NOT: call i32 ; NOINL-NOT: mul i32 ; NOINL: call i32 define amdgpu_kernel void @caller(i32 %x) { %res = call i32 @callee(i32 %x) store volatile i32 %res, i32 addrspace(1)* undef ret void } ; inlinehint define i32 @callee_hint(i32 %x) #0 { entry: %cc = icmp eq i32 %x, 1 br i1 %cc, label %ret_res, label %mulx mulx: %mul1 = mul i32 %x, %x %mul2 = mul i32 %mul1, %x %mul3 = mul i32 %mul1, %mul2 %mul4 = mul i32 %mul3, %mul2 %mul5 = mul i32 %mul4, %mul3 br label %ret_res ret_res: %r = phi i32 [ %mul5, %mulx ], [ %x, %entry ] ret i32 %r } ; INL-LABEL: @caller_hint ; NOINL-LABEL: @caller_hint ; INL: mul i32 ; INL-NOT: call i32 ; NOINL: mul i32 ; NOINL-NOT: call i32 define amdgpu_kernel void @caller_hint(i32 %x) { %res = call i32 @callee_hint(i32 %x) store volatile i32 %res, i32 addrspace(1)* undef ret void } attributes #0 = { inlinehint }