brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · a9da125 Raw
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