xref: /aosp_15_r20/external/llvm/test/Transforms/IPConstantProp/user-with-multiple-uses.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -S -ipsccp | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; PR5596
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; IPSCCP should propagate the 0 argument, eliminate the switch, and propagate
5*9880d681SAndroid Build Coastguard Worker; the result.
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; CHECK: define i32 @main() #0 {
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: entry:
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: %call2 = tail call i32 @wwrite(i64 0) [[NUW:#[0-9]+]]
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 123
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine i32 @main() noreturn nounwind {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %call2 = tail call i32 @wwrite(i64 0) nounwind
15*9880d681SAndroid Build Coastguard Worker  ret i32 %call2
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine internal i32 @wwrite(i64 %i) nounwind readnone {
19*9880d681SAndroid Build Coastguard Workerentry:
20*9880d681SAndroid Build Coastguard Worker  switch i64 %i, label %sw.default [
21*9880d681SAndroid Build Coastguard Worker    i64 3, label %return
22*9880d681SAndroid Build Coastguard Worker    i64 10, label %return
23*9880d681SAndroid Build Coastguard Worker  ]
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workersw.default:
26*9880d681SAndroid Build Coastguard Worker  ret i32 123
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerreturn:
29*9880d681SAndroid Build Coastguard Worker  ret i32 0
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; CHECK: attributes #0 = { noreturn nounwind }
33*9880d681SAndroid Build Coastguard Worker; CHECK: attributes #1 = { nounwind readnone }
34*9880d681SAndroid Build Coastguard Worker; CHECK: attributes [[NUW]] = { nounwind }
35