1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -global-merge-on-external=false \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -global-merge-on-external=false \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ 7; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s 8; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ 9; RUN: | FileCheck -check-prefix=CHECK-WEXTERN %s 10 11@ig1 = internal global i32 0, align 4 12@ig2 = internal global i32 0, align 4 13 14@eg1 = dso_local global i32 0, align 4 15@eg2 = dso_local global i32 0, align 4 16 17; TODO: It would be better for code size to alter the first store below by 18; first fully materialising .L_MergedGlobals in a1 and then storing to it with 19; a 0 offset. 20 21define void @f1(i32 %a) nounwind { 22; CHECK-LABEL: f1: 23; CHECK: # %bb.0: 24; CHECK-NEXT: lui a1, %hi(eg1) 25; CHECK-NEXT: sw a0, %lo(eg1)(a1) 26; CHECK-NEXT: lui a1, %hi(.L_MergedGlobals) 27; CHECK-NEXT: sw a0, %lo(.L_MergedGlobals)(a1) 28; CHECK-NEXT: addi a1, a1, %lo(.L_MergedGlobals) 29; CHECK-NEXT: sw a0, 4(a1) 30; CHECK-NEXT: lui a1, %hi(eg2) 31; CHECK-NEXT: sw a0, %lo(eg2)(a1) 32; CHECK-NEXT: ret 33; 34; CHECK-WEXTERN-LABEL: f1: 35; CHECK-WEXTERN: # %bb.0: 36; CHECK-WEXTERN-NEXT: lui a1, %hi(.L_MergedGlobals) 37; CHECK-WEXTERN-NEXT: sw a0, %lo(.L_MergedGlobals)(a1) 38; CHECK-WEXTERN-NEXT: addi a1, a1, %lo(.L_MergedGlobals) 39; CHECK-WEXTERN-NEXT: sw a0, 4(a1) 40; CHECK-WEXTERN-NEXT: sw a0, 8(a1) 41; CHECK-WEXTERN-NEXT: sw a0, 12(a1) 42; CHECK-WEXTERN-NEXT: ret 43 store i32 %a, ptr @ig1, align 4 44 store i32 %a, ptr @ig2, align 4 45 store i32 %a, ptr @eg1, align 4 46 store i32 %a, ptr @eg2, align 4 47 ret void 48} 49