[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / cgdata-merge-no-params.ll
blob10f0e10f11d664fd83bf2973a49b6e5038851ccf
1 ; This test verifies whether two identical functions, f1 and f2, can be merged
2 ; locally using the global merge function.
3 ; The functions, f1.Tgm and f2.Tgm, will be folded by the linker through
4 ; Identical Code Folding (ICF).
5 ; While identical functions can already be folded by the linker, creating this
6 ; canonical form can be beneficial in downstream passes. This merging process
7 ; can be controlled by the -global-merging-skip-no-params option.
9 ; RUN: llc -mtriple=arm64-apple-darwin -enable-global-merge-func=true -global-merging-skip-no-params=false < %s | FileCheck %s --check-prefix=MERGE
10 ; RUN: llc -mtriple=arm64-apple-darwin -enable-global-merge-func=true -global-merging-skip-no-params=true < %s | FileCheck %s --implicit-check-not=".Tgm"
12 ; MERGE: _f1.Tgm
13 ; MERGE: _f2.Tgm
15 @g = external local_unnamed_addr global [0 x i32], align 4
16 @g1 = external global i32, align 4
17 @g2 = external global i32, align 4
19 define i32 @f1(i32 %a) {
20 entry:
21   %idxprom = sext i32 %a to i64
22   %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i64 0, i64 %idxprom
23   %0 = load i32, i32* %arrayidx, align 4
24   %1 = load volatile i32, i32* @g1, align 4
25   %mul = mul nsw i32 %1, %0
26   %add = add nsw i32 %mul, 1
27   ret i32 %add
30 define i32 @f2(i32 %a) {
31 entry:
32   %idxprom = sext i32 %a to i64
33   %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i64 0, i64 %idxprom
34   %0 = load i32, i32* %arrayidx, align 4
35   %1 = load volatile i32, i32* @g1, align 4
36   %mul = mul nsw i32 %1, %0
37   %add = add nsw i32 %mul, 1
38   ret i32 %add