Files
TheRock/compiler/amd-llvm/llvm/test/CodeGen/AArch64/GlobalISel/fold-global-offsets-target-features.mir
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

235 lines
9.5 KiB
YAML

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=DEFAULT,CHECK
# RUN: llc -mtriple aarch64-apple-darwin -code-model=large -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=LARGE-MACHO,CHECK
# RUN: llc -mtriple aarch64-apple-darwin -code-model=small -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=SMALL-MACHO,CHECK
# RUN: llc -mtriple aarch64-linux-elf -code-model=large -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=LARGE-ELF,CHECK
# RUN: llc -mtriple aarch64-linux-elf -code-model=tiny -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=TINY,CHECK
# RUN: llc -mtriple aarch64-windows-coff -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=WINDOWS,CHECK
# Each of these tests has a trivial pattern for folding a G_PTR_ADD into a
# G_GLOBAL_VALUE.
#
# Check that given different code models/target features, we do/don't fold.
--- |
@external_linkage = external hidden global i32
@common_linkage = common local_unnamed_addr global i32 0, align 4
@internal_linkage = internal unnamed_addr global i32 0, align 4
@extern_weak_linkage = extern_weak hidden global i32
@dll_import = external dllimport global i32
define void @test_external_linkage() { ret void }
define void @test_internal_linkage() { ret void }
define void @test_common_linkage() { ret void }
define void @test_extern_weak_linkage() { ret void }
define void @never_fold_tagged_globals() #0 { ret void }
define void @test_dll_import() { ret void }
attributes #0 = { "target-features"="+tagged-globals" }
...
---
name: test_external_linkage
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; Large + Mach-O goes via GOT, so we can't fold.
; DEFAULT-LABEL: name: test_external_linkage
; DEFAULT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 1
; DEFAULT-NEXT: $x0 = COPY [[GV]](p0)
; DEFAULT-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-MACHO-LABEL: name: test_external_linkage
; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @external_linkage
; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)
; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; SMALL-MACHO-LABEL: name: test_external_linkage
; SMALL-MACHO: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 1
; SMALL-MACHO-NEXT: $x0 = COPY [[GV]](p0)
; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-ELF-LABEL: name: test_external_linkage
; LARGE-ELF: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 1
; LARGE-ELF-NEXT: $x0 = COPY [[GV]](p0)
; LARGE-ELF-NEXT: RET_ReallyLR implicit $x0
;
; TINY-LABEL: name: test_external_linkage
; TINY: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 1
; TINY-NEXT: $x0 = COPY [[GV]](p0)
; TINY-NEXT: RET_ReallyLR implicit $x0
;
; WINDOWS-LABEL: name: test_external_linkage
; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @external_linkage + 1
; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)
; WINDOWS-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @external_linkage
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0
...
---
name: test_internal_linkage
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; Large + Mach-O goes via GOT, so we can't fold.
; DEFAULT-LABEL: name: test_internal_linkage
; DEFAULT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1
; DEFAULT-NEXT: $x0 = COPY [[GV]](p0)
; DEFAULT-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-MACHO-LABEL: name: test_internal_linkage
; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @internal_linkage
; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)
; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; SMALL-MACHO-LABEL: name: test_internal_linkage
; SMALL-MACHO: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1
; SMALL-MACHO-NEXT: $x0 = COPY [[GV]](p0)
; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-ELF-LABEL: name: test_internal_linkage
; LARGE-ELF: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1
; LARGE-ELF-NEXT: $x0 = COPY [[GV]](p0)
; LARGE-ELF-NEXT: RET_ReallyLR implicit $x0
;
; TINY-LABEL: name: test_internal_linkage
; TINY: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1
; TINY-NEXT: $x0 = COPY [[GV]](p0)
; TINY-NEXT: RET_ReallyLR implicit $x0
;
; WINDOWS-LABEL: name: test_internal_linkage
; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @internal_linkage + 1
; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)
; WINDOWS-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @internal_linkage
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0
...
---
name: test_common_linkage
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; DEFAULT-LABEL: name: test_common_linkage
; DEFAULT: %global:_(p0) = G_GLOBAL_VALUE @common_linkage
; DEFAULT-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; DEFAULT-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; DEFAULT-NEXT: $x0 = COPY %ptr_add(p0)
; DEFAULT-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-MACHO-LABEL: name: test_common_linkage
; LARGE-MACHO: %global:_(p0) = G_GLOBAL_VALUE @common_linkage
; LARGE-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; LARGE-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; LARGE-MACHO-NEXT: $x0 = COPY %ptr_add(p0)
; LARGE-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; SMALL-MACHO-LABEL: name: test_common_linkage
; SMALL-MACHO: %global:_(p0) = G_GLOBAL_VALUE @common_linkage
; SMALL-MACHO-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; SMALL-MACHO-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; SMALL-MACHO-NEXT: $x0 = COPY %ptr_add(p0)
; SMALL-MACHO-NEXT: RET_ReallyLR implicit $x0
;
; LARGE-ELF-LABEL: name: test_common_linkage
; LARGE-ELF: %global:_(p0) = G_GLOBAL_VALUE @common_linkage
; LARGE-ELF-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; LARGE-ELF-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; LARGE-ELF-NEXT: $x0 = COPY %ptr_add(p0)
; LARGE-ELF-NEXT: RET_ReallyLR implicit $x0
;
; TINY-LABEL: name: test_common_linkage
; TINY: %global:_(p0) = G_GLOBAL_VALUE @common_linkage
; TINY-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; TINY-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; TINY-NEXT: $x0 = COPY %ptr_add(p0)
; TINY-NEXT: RET_ReallyLR implicit $x0
;
; WINDOWS-LABEL: name: test_common_linkage
; WINDOWS: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @common_linkage + 1
; WINDOWS-NEXT: $x0 = COPY [[GV]](p0)
; WINDOWS-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @common_linkage
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0
...
---
name: test_extern_weak_linkage
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; CHECK-LABEL: name: test_extern_weak_linkage
; CHECK: %global:_(p0) = G_GLOBAL_VALUE @extern_weak_linkage
; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; CHECK-NEXT: $x0 = COPY %ptr_add(p0)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @extern_weak_linkage
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0
...
---
name: never_fold_tagged_globals
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; CHECK-LABEL: name: never_fold_tagged_globals
; CHECK: %global:_(p0) = G_GLOBAL_VALUE @external_linkage
; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; CHECK-NEXT: $x0 = COPY %ptr_add(p0)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @external_linkage
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0
...
---
name: test_dll_import
alignment: 4
tracksRegLiveness: true
machineFunctionInfo: {}
body: |
bb.0:
; CHECK-LABEL: name: test_dll_import
; CHECK: %global:_(p0) = G_GLOBAL_VALUE @dll_import
; CHECK-NEXT: %imm:_(s64) = G_CONSTANT i64 1
; CHECK-NEXT: %ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
; CHECK-NEXT: $x0 = COPY %ptr_add(p0)
; CHECK-NEXT: RET_ReallyLR implicit $x0
%global:_(p0) = G_GLOBAL_VALUE @dll_import
%imm:_(s64) = G_CONSTANT i64 1
%ptr_add:_(p0) = G_PTR_ADD %global, %imm(s64)
$x0 = COPY %ptr_add(p0)
RET_ReallyLR implicit $x0