xref: /llvm-project/llvm/test/CodeGen/Generic/addr-use-count.ll (revision f1ec0d12bb0843f0deab83ef2b5cf1339cbc4f0b)
15c9a2623SMomchil Velikov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*f1ec0d12SNick Anderson; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' < %s | FileCheck %s
35c9a2623SMomchil Velikov; REQUIRES: aarch64-registered-target
45c9a2623SMomchil Velikov
599e57f06SMomchil Velikov; Test that `%addr` is sunk, after we've increased limit on the number of the memory uses to scan.
65c9a2623SMomchil Velikov
75c9a2623SMomchil Velikovtarget triple = "aarch64-linux"
85c9a2623SMomchil Velikov
95c9a2623SMomchil Velikovdeclare void @g(...)
105c9a2623SMomchil Velikov
115c9a2623SMomchil Velikovdefine void @f(ptr %p) {
125c9a2623SMomchil Velikov; CHECK-LABEL: @f(
135c9a2623SMomchil Velikov; CHECK-NEXT:  entry:
1499e57f06SMomchil Velikov; CHECK-NEXT:    [[SUNKADDR:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 4
1599e57f06SMomchil Velikov; CHECK-NEXT:    [[T0:%.*]] = load i32, ptr [[SUNKADDR]], align 4
1699e57f06SMomchil Velikov; CHECK-NEXT:    [[T1:%.*]] = load i32, ptr [[SUNKADDR]], align 4
1799e57f06SMomchil Velikov; CHECK-NEXT:    [[T2:%.*]] = load i32, ptr [[SUNKADDR]], align 4
1899e57f06SMomchil Velikov; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[SUNKADDR]], align 4
1999e57f06SMomchil Velikov; CHECK-NEXT:    [[T4:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2099e57f06SMomchil Velikov; CHECK-NEXT:    [[T5:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2199e57f06SMomchil Velikov; CHECK-NEXT:    [[T6:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2299e57f06SMomchil Velikov; CHECK-NEXT:    [[T7:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2399e57f06SMomchil Velikov; CHECK-NEXT:    [[T8:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2499e57f06SMomchil Velikov; CHECK-NEXT:    [[T9:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2599e57f06SMomchil Velikov; CHECK-NEXT:    [[T10:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2699e57f06SMomchil Velikov; CHECK-NEXT:    [[T11:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2799e57f06SMomchil Velikov; CHECK-NEXT:    [[T12:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2899e57f06SMomchil Velikov; CHECK-NEXT:    [[T13:%.*]] = load i32, ptr [[SUNKADDR]], align 4
2999e57f06SMomchil Velikov; CHECK-NEXT:    [[T14:%.*]] = load i32, ptr [[SUNKADDR]], align 4
3099e57f06SMomchil Velikov; CHECK-NEXT:    [[T15:%.*]] = load i32, ptr [[SUNKADDR]], align 4
3199e57f06SMomchil Velikov; CHECK-NEXT:    [[T16:%.*]] = load i32, ptr [[SUNKADDR]], align 4
3299e57f06SMomchil Velikov; CHECK-NEXT:    [[T17:%.*]] = load i32, ptr [[SUNKADDR]], align 4
3399e57f06SMomchil Velikov; CHECK-NEXT:    [[T18:%.*]] = load i32, ptr [[SUNKADDR]], align 4
3499e57f06SMomchil Velikov; CHECK-NEXT:    [[SUNKADDR1:%.*]] = getelementptr i8, ptr [[P]], i64 8
3599e57f06SMomchil Velikov; CHECK-NEXT:    [[T19:%.*]] = load i32, ptr [[SUNKADDR1]], align 4
365c9a2623SMomchil Velikov; CHECK-NEXT:    call void @g(i32 [[T0]], i32 [[T1]], i32 [[T2]], i32 [[T3]], i32 [[T4]], i32 [[T5]], i32 [[T6]], i32 [[T7]], i32 [[T8]], i32 [[T9]], i32 [[T10]], i32 [[T11]], i32 [[T12]], i32 [[T13]], i32 [[T14]], i32 [[T15]], i32 [[T16]], i32 [[T17]], i32 [[T18]], i32 [[T19]])
375c9a2623SMomchil Velikov; CHECK-NEXT:    ret void
385c9a2623SMomchil Velikov;
395c9a2623SMomchil Velikoventry:
405c9a2623SMomchil Velikov  %addr = getelementptr i8, ptr %p, i32 4
415c9a2623SMomchil Velikov  br label %exit
425c9a2623SMomchil Velikov
435c9a2623SMomchil Velikovexit:
445c9a2623SMomchil Velikov  %t0 = load i32, ptr %addr
455c9a2623SMomchil Velikov  %t1 = load i32, ptr %addr
465c9a2623SMomchil Velikov  %t2 = load i32, ptr %addr
475c9a2623SMomchil Velikov  %t3 = load i32, ptr %addr
485c9a2623SMomchil Velikov  %t4 = load i32, ptr %addr
495c9a2623SMomchil Velikov  %t5 = load i32, ptr %addr
505c9a2623SMomchil Velikov  %t6 = load i32, ptr %addr
515c9a2623SMomchil Velikov  %t7 = load i32, ptr %addr
525c9a2623SMomchil Velikov  %t8 = load i32, ptr %addr
535c9a2623SMomchil Velikov  %t9 = load i32, ptr %addr
545c9a2623SMomchil Velikov  %t10 = load i32, ptr %addr
555c9a2623SMomchil Velikov  %t11 = load i32, ptr %addr
565c9a2623SMomchil Velikov  %t12 = load i32, ptr %addr
575c9a2623SMomchil Velikov  %t13 = load i32, ptr %addr
585c9a2623SMomchil Velikov  %t14 = load i32, ptr %addr
595c9a2623SMomchil Velikov  %t15 = load i32, ptr %addr
605c9a2623SMomchil Velikov  %t16 = load i32, ptr %addr
615c9a2623SMomchil Velikov  %t17 = load i32, ptr %addr
625c9a2623SMomchil Velikov  %t18 = load i32, ptr %addr
635c9a2623SMomchil Velikov  %addr.1 = getelementptr i8, ptr %addr, i32 4
645c9a2623SMomchil Velikov  %t19 = load i32, ptr %addr.1
655c9a2623SMomchil Velikov
665c9a2623SMomchil Velikov  call void @g(i32 %t0, i32 %t1, i32 %t2, i32 %t3, i32 %t4, i32 %t5, i32 %t6, i32 %t7,
675c9a2623SMomchil Velikov  i32 %t8, i32 %t9, i32 %t10, i32 %t11, i32 %t12, i32 %t13, i32 %t14, i32 %t15, i32 %t16,
685c9a2623SMomchil Velikov  i32 %t17, i32 %t18, i32 %t19)
695c9a2623SMomchil Velikov  ret void
705c9a2623SMomchil Velikov}
71