brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 3dd681c Raw
86 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -debugify-and-strip-all-safe -mtriple aarch64 -O0 -run-pass=aarch64-prelegalizer-combiner --aarch64prelegalizercombiner-only-enable-rule="load_or_combine" -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=NOT_STRICT3# RUN: llc -debugify-and-strip-all-safe -mattr=+strict-align -mtriple aarch64 -O0 -run-pass=aarch64-prelegalizer-combiner --aarch64prelegalizercombiner-only-enable-rule="load_or_combine" -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=STRICT4 5# REQUIRES: asserts6 7# Check that the load-or combine respects alignment requirements.8...9---10name:            misaligned11tracksRegLiveness: true12body:             |13  bb.0:14    liveins: $x0, $x115    ; NOT_STRICT-LABEL: name: misaligned16    ; NOT_STRICT: liveins: $x0, $x117    ; NOT_STRICT-NEXT: {{  $}}18    ; NOT_STRICT-NEXT: %ptr:_(p0) = COPY $x119    ; NOT_STRICT-NEXT: %full_load:_(s32) = G_LOAD %ptr(p0) :: (load (s32), align 2)20    ; NOT_STRICT-NEXT: $w1 = COPY %full_load(s32)21    ; NOT_STRICT-NEXT: RET_ReallyLR implicit $w122    ;23    ; STRICT-LABEL: name: misaligned24    ; STRICT: liveins: $x0, $x125    ; STRICT-NEXT: {{  $}}26    ; STRICT-NEXT: %cst_1:_(s64) = G_CONSTANT i64 127    ; STRICT-NEXT: %cst_16:_(s32) = G_CONSTANT i32 1628    ; STRICT-NEXT: %ptr:_(p0) = COPY $x129    ; STRICT-NEXT: %ptr_elt_1:_(p0) = G_PTR_ADD %ptr, %cst_1(s64)30    ; STRICT-NEXT: %low_half:_(s32) = G_ZEXTLOAD %ptr(p0) :: (load (s16))31    ; STRICT-NEXT: %elt1:_(s32) = G_ZEXTLOAD %ptr_elt_1(p0) :: (load (s16))32    ; STRICT-NEXT: %high_half:_(s32) = nuw G_SHL %elt1, %cst_16(s32)33    ; STRICT-NEXT: %full_load:_(s32) = G_OR %low_half, %high_half34    ; STRICT-NEXT: $w1 = COPY %full_load(s32)35    ; STRICT-NEXT: RET_ReallyLR implicit $w136    %cst_1:_(s64) = G_CONSTANT i64 137    %cst_16:_(s32) = G_CONSTANT i32 1638 39    %ptr:_(p0) = COPY $x140    %ptr_elt_1:_(p0) = G_PTR_ADD %ptr, %cst_1(s64)41 42    %low_half:_(s32) = G_ZEXTLOAD %ptr(p0) :: (load (s16), align 2)43    %elt1:_(s32) = G_ZEXTLOAD %ptr_elt_1(p0) :: (load (s16), align 2)44    %high_half:_(s32) = nuw G_SHL %elt1, %cst_16(s32)45 46    %full_load:_(s32) = G_OR %low_half, %high_half47    $w1 = COPY %full_load(s32)48    RET_ReallyLR implicit $w149 50...51---52name:            aligned53tracksRegLiveness: true54body:             |55  bb.0:56    liveins: $x0, $x157 58    ; NOT_STRICT-LABEL: name: aligned59    ; NOT_STRICT: liveins: $x0, $x160    ; NOT_STRICT-NEXT: {{  $}}61    ; NOT_STRICT-NEXT: %ptr:_(p0) = COPY $x162    ; NOT_STRICT-NEXT: %full_load:_(s32) = G_LOAD %ptr(p0) :: (load (s32))63    ; NOT_STRICT-NEXT: $w1 = COPY %full_load(s32)64    ; NOT_STRICT-NEXT: RET_ReallyLR implicit $w165    ;66    ; STRICT-LABEL: name: aligned67    ; STRICT: liveins: $x0, $x168    ; STRICT-NEXT: {{  $}}69    ; STRICT-NEXT: %ptr:_(p0) = COPY $x170    ; STRICT-NEXT: %full_load:_(s32) = G_LOAD %ptr(p0) :: (load (s32))71    ; STRICT-NEXT: $w1 = COPY %full_load(s32)72    ; STRICT-NEXT: RET_ReallyLR implicit $w173    %cst_1:_(s64) = G_CONSTANT i64 174    %cst_16:_(s32) = G_CONSTANT i32 1675 76    %ptr:_(p0) = COPY $x177    %ptr_elt_1:_(p0) = G_PTR_ADD %ptr, %cst_1(s64)78 79    %low_half:_(s32) = G_ZEXTLOAD %ptr(p0) :: (load (s16), align 4)80    %elt1:_(s32) = G_ZEXTLOAD %ptr_elt_1(p0) :: (load (s16), align 4)81    %high_half:_(s32) = nuw G_SHL %elt1, %cst_16(s32)82 83    %full_load:_(s32) = G_OR %low_half, %high_half84    $w1 = COPY %full_load(s32)85    RET_ReallyLR implicit $w186