xref: /llvm-project/llvm/test/CodeGen/RISCV/global-merge-offset.ll (revision 3787fbf0402b4e03e316c13231f8873769701250)
151ae4624SAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
29d02264bSAlex Bradbury; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv32 \
3*3787fbf0SAlex Bradbury; RUN:   -verify-machineinstrs | FileCheck %s
49d02264bSAlex Bradbury; RUN: sed 's/ArrSize/100/g' %s | llc -mtriple=riscv64 \
5*3787fbf0SAlex Bradbury; RUN:   -verify-machineinstrs | FileCheck %s
69d02264bSAlex Bradbury; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv32 \
7*3787fbf0SAlex Bradbury; RUN:   -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
89d02264bSAlex Bradbury; RUN: sed 's/ArrSize/101/g' %s | llc -mtriple=riscv64 \
9*3787fbf0SAlex Bradbury; RUN:   -verify-machineinstrs | FileCheck %s -check-prefix=CHECK-TOOBIG
1051ae4624SAlex Bradbury
1151ae4624SAlex Bradbury; This test demonstrates that the MaxOffset is set correctly for RISC-V by
1251ae4624SAlex Bradbury; constructing an input that is at the limit and comparing.
1351ae4624SAlex Bradbury
1451ae4624SAlex Bradbury@ga1 = dso_local global [410 x i32] zeroinitializer, align 4
1551ae4624SAlex Bradbury@ga2 = dso_local global [ArrSize x i32] zeroinitializer, align 4
1651ae4624SAlex Bradbury@gi = dso_local global i32 0, align 4
1751ae4624SAlex Bradbury
1851ae4624SAlex Bradbury; TODO: It would be better for codesize if the final store below was
1951ae4624SAlex Bradbury; `sw a0, 0(a2)`.
2051ae4624SAlex Bradbury
2151ae4624SAlex Bradburydefine void @f1(i32 %a) nounwind {
2251ae4624SAlex Bradbury; CHECK-LABEL: f1:
2351ae4624SAlex Bradbury; CHECK:       # %bb.0:
2451ae4624SAlex Bradbury; CHECK-NEXT:    lui a1, %hi(.L_MergedGlobals)
2551ae4624SAlex Bradbury; CHECK-NEXT:    addi a2, a1, %lo(.L_MergedGlobals)
2651ae4624SAlex Bradbury; CHECK-NEXT:    sw a0, 2044(a2)
2751ae4624SAlex Bradbury; CHECK-NEXT:    sw a0, 404(a2)
2851ae4624SAlex Bradbury; CHECK-NEXT:    sw a0, %lo(.L_MergedGlobals)(a1)
2951ae4624SAlex Bradbury; CHECK-NEXT:    ret
3051ae4624SAlex Bradbury;
3151ae4624SAlex Bradbury; CHECK-TOOBIG-LABEL: f1:
3251ae4624SAlex Bradbury; CHECK-TOOBIG:       # %bb.0:
3351ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    lui a1, %hi(ga1+1640)
3451ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    lui a2, %hi(.L_MergedGlobals)
3551ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    addi a3, a2, %lo(.L_MergedGlobals)
3651ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    sw a0, %lo(ga1+1640)(a1)
3751ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    sw a0, 408(a3)
3851ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    sw a0, %lo(.L_MergedGlobals)(a2)
3951ae4624SAlex Bradbury; CHECK-TOOBIG-NEXT:    ret
4051ae4624SAlex Bradbury  %ga1_end = getelementptr inbounds [410 x i32], ptr @ga1, i32 0, i64 410
4151ae4624SAlex Bradbury  %ga2_end = getelementptr inbounds [ArrSize x i32], ptr @ga2, i32 0, i64 ArrSize
4251ae4624SAlex Bradbury  store i32 %a, ptr %ga1_end, align 4
4351ae4624SAlex Bradbury  store i32 %a, ptr %ga2_end, align 4
4451ae4624SAlex Bradbury  store i32 %a, ptr @gi, align 4
4551ae4624SAlex Bradbury  ret void
4651ae4624SAlex Bradbury}
47