64 lines · plain
1; RUN: opt -passes="ipsccp<func-spec>" -force-specialization \2; RUN: -funcspec-for-literal-constant=false -funcspec-max-clones=2 \3; RUN: -S < %s | FileCheck %s4 5; RUN: opt -passes="ipsccp<func-spec>" -force-specialization \6; RUN: -funcspec-for-literal-constant=false -funcspec-max-clones=1 \7; RUN: -S < %s | FileCheck %s --check-prefix=CONST18 9target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"10 11@A = external dso_local constant i32, align 412@B = external dso_local constant i32, align 413@C = external dso_local constant i32, align 414@D = external dso_local constant i32, align 415 16define dso_local i32 @bar(i32 %x, i32 %y) {17entry:18 %tobool = icmp ne i32 %x, 019 br i1 %tobool, label %if.then, label %if.else20 21if.then:22 %call = call i32 @foo(i32 %x, ptr @A, ptr @C)23 br label %return24 25if.else:26 %call1 = call i32 @foo(i32 %y, ptr @B, ptr @D)27 br label %return28 29return:30 %retval.0 = phi i32 [ %call, %if.then ], [ %call1, %if.else ]31 ret i32 %retval.032}33 34; CHECK-NOT: define internal i32 @foo(35define internal i32 @foo(i32 %x, ptr %b, ptr %c) {36entry:37 %0 = load i32, ptr %b, align 438 %add = add nsw i32 %x, %039 %1 = load i32, ptr %c, align 440 %add1 = add nsw i32 %add, %141 ret i32 %add142}43 44; CONST1: define internal i32 @foo.specialized.1(i32 %x, ptr %b, ptr %c)45; CONST1-NOT: define internal i32 @foo.specialized.2(i32 %x, ptr %b, ptr %c)46 47; CHECK: define internal i32 @foo.specialized.1(i32 %x, ptr %b, ptr %c) {48; CHECK-NEXT: entry:49; CHECK-NEXT: %0 = load i32, ptr @A, align 450; CHECK-NEXT: %add = add nsw i32 %x, %051; CHECK-NEXT: %1 = load i32, ptr @C, align 452; CHECK-NEXT: %add1 = add nsw i32 %add, %153; CHECK-NEXT: ret i32 %add154; CHECK-NEXT: }55 56; CHECK: define internal i32 @foo.specialized.2(i32 %x, ptr %b, ptr %c) {57; CHECK-NEXT: entry:58; CHECK-NEXT: %0 = load i32, ptr @B, align 459; CHECK-NEXT: %add = add nsw i32 %x, %060; CHECK-NEXT: %1 = load i32, ptr @D, align 461; CHECK-NEXT: %add1 = add nsw i32 %add, %162; CHECK-NEXT: ret i32 %add163; CHECK-NEXT: }64