xref: /llvm-project/llvm/test/Transforms/SCCP/user-with-multiple-uses.ll (revision 8ebb3eac02a926ffa4298c12834c57aefb2e8579)
1*8ebb3eacSBjorn Pettersson; RUN: opt < %s -S -passes=ipsccp | FileCheck %s
29477d39eSFlorian Hahn; PR5596
39477d39eSFlorian Hahn
49477d39eSFlorian Hahn; IPSCCP should propagate the 0 argument, eliminate the switch, and propagate
59477d39eSFlorian Hahn; the result.
69477d39eSFlorian Hahn
79477d39eSFlorian Hahn; CHECK: define i32 @main() #0 {
89477d39eSFlorian Hahn; CHECK-NEXT: entry:
99477d39eSFlorian Hahn; CHECK-NEXT: %call2 = tail call i32 @wwrite(i64 0) [[NUW:#[0-9]+]]
109477d39eSFlorian Hahn; CHECK-NEXT: ret i32 123
119477d39eSFlorian Hahn
129477d39eSFlorian Hahndefine i32 @main() noreturn nounwind {
139477d39eSFlorian Hahnentry:
149477d39eSFlorian Hahn  %call2 = tail call i32 @wwrite(i64 0) nounwind
159477d39eSFlorian Hahn  ret i32 %call2
169477d39eSFlorian Hahn}
179477d39eSFlorian Hahn
189477d39eSFlorian Hahndefine internal i32 @wwrite(i64 %i) nounwind {
199477d39eSFlorian Hahnentry:
209477d39eSFlorian Hahn  switch i64 %i, label %sw.default [
219477d39eSFlorian Hahn    i64 3, label %return
229477d39eSFlorian Hahn    i64 10, label %return
239477d39eSFlorian Hahn  ]
249477d39eSFlorian Hahn
259477d39eSFlorian Hahnsw.default:
269477d39eSFlorian Hahn  ret i32 123
279477d39eSFlorian Hahn
289477d39eSFlorian Hahnreturn:
299477d39eSFlorian Hahn  ret i32 0
309477d39eSFlorian Hahn}
31