40 lines · plain
1; This test verifies whether two identical functions, f1 and f2, can be merged2; locally using the global merge function.3; The functions, f1.Tgm and f2.Tgm, will be folded by the linker through4; Identical Code Folding (ICF).5; While identical functions can already be folded by the linker, creating this6; canonical form can be beneficial in downstream passes. This merging process7; can be controlled by the -global-merging-skip-no-params option.8 9; RUN: llc -mtriple=arm64-apple-darwin -enable-global-merge-func=true -global-merging-skip-no-params=false < %s | FileCheck %s --check-prefix=MERGE10; RUN: llc -mtriple=arm64-apple-darwin -enable-global-merge-func=true -global-merging-skip-no-params=true < %s | FileCheck %s --implicit-check-not=".Tgm"11 12; MERGE: _f1.Tgm13; MERGE: _f2.Tgm14 15@g = external local_unnamed_addr global [0 x i32], align 416@g1 = external global i32, align 417@g2 = external global i32, align 418 19define i32 @f1(i32 %a) {20entry:21 %idxprom = sext i32 %a to i6422 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i64 0, i64 %idxprom23 %0 = load i32, ptr %arrayidx, align 424 %1 = load volatile i32, ptr @g1, align 425 %mul = mul nsw i32 %1, %026 %add = add nsw i32 %mul, 127 ret i32 %add28}29 30define i32 @f2(i32 %a) {31entry:32 %idxprom = sext i32 %a to i6433 %arrayidx = getelementptr inbounds [0 x i32], ptr @g, i64 0, i64 %idxprom34 %0 = load i32, ptr %arrayidx, align 435 %1 = load volatile i32, ptr @g1, align 436 %mul = mul nsw i32 %1, %037 %add = add nsw i32 %mul, 138 ret i32 %add39}40