xref: /aosp_15_r20/external/llvm/test/Transforms/Inline/ephemeral.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -Oz %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@a = global i32 4
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine i1 @inner() {
6*9880d681SAndroid Build Coastguard Worker  %a1 = load volatile i32, i32* @a
7*9880d681SAndroid Build Coastguard Worker  %x1 = add i32 %a1, %a1
8*9880d681SAndroid Build Coastguard Worker  %c = icmp eq i32 %x1, 0
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker  ; Here are enough instructions to prevent inlining, but because they are used
11*9880d681SAndroid Build Coastguard Worker  ; only by the @llvm.assume intrinsic, they're free (and, thus, inlining will
12*9880d681SAndroid Build Coastguard Worker  ; still happen).
13*9880d681SAndroid Build Coastguard Worker  %a2 = mul i32 %a1, %a1
14*9880d681SAndroid Build Coastguard Worker  %a3 = sub i32 %a1, 5
15*9880d681SAndroid Build Coastguard Worker  %a4 = udiv i32 %a3, -13
16*9880d681SAndroid Build Coastguard Worker  %a5 = mul i32 %a4, %a4
17*9880d681SAndroid Build Coastguard Worker  %a6 = add i32 %a5, %x1
18*9880d681SAndroid Build Coastguard Worker  %ca = icmp sgt i32 %a6, -7
19*9880d681SAndroid Build Coastguard Worker  tail call void @llvm.assume(i1 %ca)
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker  ret i1 %c
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; @inner() should be inlined for -Oz.
25*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call i1 @inner
26*9880d681SAndroid Build Coastguard Workerdefine i1 @outer() optsize {
27*9880d681SAndroid Build Coastguard Worker   %r = call i1 @inner()
28*9880d681SAndroid Build Coastguard Worker   ret i1 %r
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.assume(i1) nounwind
32*9880d681SAndroid Build Coastguard Worker
33