xref: /llvm-project/llvm/test/Transforms/FunctionSpecialization/function-specialization-noexec.ll (revision e15d72adac66790a78a51a3087b56b2bde6b778a)
19627bcdeSAlexandros Lamprineas; RUN: opt -passes="ipsccp<func-spec>" -force-specialization -S < %s | FileCheck %s
229843cbcSSjoerd Meijer
329843cbcSSjoerd Meijer; The if.then block is not executed, so check that we don't specialise here.
429843cbcSSjoerd Meijer
5*e15d72adSAlexandros Lamprineas; CHECK-NOT: @foo.specialized.1(
6*e15d72adSAlexandros Lamprineas; CHECK-NOT: @foo.specialized.2(
729843cbcSSjoerd Meijer
829843cbcSSjoerd Meijertarget datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
929843cbcSSjoerd Meijer
1029843cbcSSjoerd Meijer@A = external dso_local constant i32, align 4
1129843cbcSSjoerd Meijer@B = external dso_local constant i32, align 4
1229843cbcSSjoerd Meijer
1329843cbcSSjoerd Meijerdefine dso_local i32 @bar(i32 %x, i32 %y) {
1429843cbcSSjoerd Meijerentry:
1529843cbcSSjoerd Meijer  %tobool = icmp ne i32 %x, 0
1629843cbcSSjoerd Meijer  br i1 false, label %if.then, label %if.else
1729843cbcSSjoerd Meijer
1829843cbcSSjoerd Meijerif.then:
19ebdf5aefSMatt Arsenault  %call = call i32 @foo(i32 %x, ptr @A)
2029843cbcSSjoerd Meijer  br label %return
2129843cbcSSjoerd Meijer
2229843cbcSSjoerd Meijerif.else:
23ebdf5aefSMatt Arsenault  %call1 = call i32 @foo(i32 %y, ptr @B)
2429843cbcSSjoerd Meijer  br label %return
2529843cbcSSjoerd Meijer
2629843cbcSSjoerd Meijerreturn:
2729843cbcSSjoerd Meijer  %retval.0 = phi i32 [ %call, %if.then ], [ %call1, %if.else ]
2829843cbcSSjoerd Meijer  ret i32 %retval.0
2929843cbcSSjoerd Meijer}
3029843cbcSSjoerd Meijer
31ebdf5aefSMatt Arsenaultdefine internal i32 @foo(i32 %x, ptr %b) {
3229843cbcSSjoerd Meijerentry:
33ebdf5aefSMatt Arsenault  %0 = load i32, ptr %b, align 4
3429843cbcSSjoerd Meijer  %add = add nsw i32 %x, %0
3529843cbcSSjoerd Meijer  ret i32 %add
3629843cbcSSjoerd Meijer}
37