-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AIE2] Lowering of natively unsupported SEXT_INREGs
We can lower before instruction selection. As we select SEXT_INREG using shifts for size > 16, we can have some shift optimization opportunities.
- Loading branch information
1 parent
7549810
commit 13fbd6a
Showing
17 changed files
with
289 additions
and
147 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
127 changes: 127 additions & 0 deletions
127
llvm/test/CodeGen/AIE/GlobalISel/legalize-sel-sext-inreg-shift.mir
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
# | ||
# This file is licensed under the Apache License v2.0 with LLVM Exceptions. | ||
# See https://llvm.org/LICENSE.txt for license information. | ||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
# | ||
# (c) Copyright 2024 Advanced Micro Devices, Inc. or its affiliates | ||
# RUN: llc -mtriple aie2 --start-before=legalizer --stop-after=instruction-select \ | ||
# RUN: %s -verify-machineinstrs -o - | FileCheck %s | ||
|
||
|
||
# This test verifies different combinations of SEXT_INREG and shifts | ||
# against legalization and selection. | ||
|
||
--- | ||
name: test_sext_inreg7_shift | ||
body: | | ||
bb.0: | ||
liveins: $r6 | ||
; CHECK-LABEL: name: test_sext_inreg7_shift | ||
; CHECK: liveins: $r6 | ||
; CHECK-NEXT: {{ $}} | ||
; CHECK-NEXT: [[COPY:%[0-9]+]]:er = COPY $r6 | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 29 | ||
; CHECK-NEXT: [[LSHL:%[0-9]+]]:er = LSHL [[COPY]], [[MOV_RLC_imm10_pseudo]] | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo1:%[0-9]+]]:er = MOV_RLC_imm10_pseudo -29 | ||
; CHECK-NEXT: [[ASHL:%[0-9]+]]:er = ASHL [[LSHL]], [[MOV_RLC_imm10_pseudo1]] | ||
; CHECK-NEXT: $r0 = COPY [[ASHL]] | ||
%0:_(s32) = COPY $r6 | ||
%1:_(s32) = G_CONSTANT i32 4 | ||
%2:_(s32) = G_SHL %0, %1 | ||
%3:_(s32) = G_SEXT_INREG %2, 7 | ||
%4:_(s32) = G_ASHR %3, %1 | ||
$r0 = COPY %4 | ||
... | ||
|
||
--- | ||
name: test_sext_inreg20_shift | ||
body: | | ||
bb.0: | ||
liveins: $r6 | ||
; CHECK-LABEL: name: test_sext_inreg20_shift | ||
; CHECK: liveins: $r6 | ||
; CHECK-NEXT: {{ $}} | ||
; CHECK-NEXT: [[COPY:%[0-9]+]]:er = COPY $r6 | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 16 | ||
; CHECK-NEXT: [[LSHL:%[0-9]+]]:er = LSHL [[COPY]], [[MOV_RLC_imm10_pseudo]] | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo1:%[0-9]+]]:er = MOV_RLC_imm10_pseudo -16 | ||
; CHECK-NEXT: [[ASHL:%[0-9]+]]:er = ASHL [[LSHL]], [[MOV_RLC_imm10_pseudo1]] | ||
; CHECK-NEXT: $r0 = COPY [[ASHL]] | ||
%0:_(s32) = COPY $r6 | ||
%1:_(s32) = G_CONSTANT i32 4 | ||
%2:_(s32) = G_SHL %0, %1 | ||
%3:_(s32) = G_SEXT_INREG %2, 20 | ||
%4:_(s32) = G_ASHR %3, %1 | ||
$r0 = COPY %4 | ||
... | ||
|
||
--- | ||
name: test_sext_inreg20_shift20 | ||
body: | | ||
bb.0: | ||
liveins: $r6 | ||
; CHECK-LABEL: name: test_sext_inreg20_shift20 | ||
; CHECK: liveins: $r6 | ||
; CHECK-NEXT: {{ $}} | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 0 | ||
; CHECK-NEXT: $r0 = COPY [[MOV_RLC_imm10_pseudo]] | ||
%0:_(s32) = COPY $r6 | ||
%1:_(s32) = G_CONSTANT i32 20 | ||
%2:_(s32) = G_SHL %0, %1 | ||
%3:_(s32) = G_SEXT_INREG %2, 20 | ||
%4:_(s32) = G_ASHR %3, %1 | ||
$r0 = COPY %4 | ||
... | ||
|
||
--- | ||
name: test_sext_inreg16_shift | ||
body: | | ||
bb.0: | ||
liveins: $r6 | ||
; CHECK-LABEL: name: test_sext_inreg16_shift | ||
; CHECK: liveins: $r6 | ||
; CHECK-NEXT: {{ $}} | ||
; CHECK-NEXT: [[COPY:%[0-9]+]]:er = COPY $r6 | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 4 | ||
; CHECK-NEXT: [[LSHL:%[0-9]+]]:er = LSHL [[COPY]], [[MOV_RLC_imm10_pseudo]] | ||
; CHECK-NEXT: [[EXTENDs16_:%[0-9]+]]:er = EXTENDs16 [[LSHL]] | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo1:%[0-9]+]]:er = MOV_RLC_imm10_pseudo -4 | ||
; CHECK-NEXT: [[ASHL:%[0-9]+]]:er = ASHL [[EXTENDs16_]], [[MOV_RLC_imm10_pseudo1]] | ||
; CHECK-NEXT: $r0 = COPY [[ASHL]] | ||
%0:_(s32) = COPY $r6 | ||
%1:_(s32) = G_CONSTANT i32 4 | ||
%2:_(s32) = G_SHL %0, %1 | ||
%3:_(s32) = G_SEXT_INREG %2, 16 | ||
%4:_(s32) = G_ASHR %3, %1 | ||
$r0 = COPY %4 | ||
... | ||
|
||
--- | ||
name: test_sext_inreg8_shift | ||
body: | | ||
bb.0: | ||
liveins: $r6 | ||
; CHECK-LABEL: name: test_sext_inreg8_shift | ||
; CHECK: liveins: $r6 | ||
; CHECK-NEXT: {{ $}} | ||
; CHECK-NEXT: [[COPY:%[0-9]+]]:er = COPY $r6 | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo:%[0-9]+]]:er = MOV_RLC_imm10_pseudo 4 | ||
; CHECK-NEXT: [[LSHL:%[0-9]+]]:er = LSHL [[COPY]], [[MOV_RLC_imm10_pseudo]] | ||
; CHECK-NEXT: [[EXTENDs8_:%[0-9]+]]:er = EXTENDs8 [[LSHL]] | ||
; CHECK-NEXT: [[MOV_RLC_imm10_pseudo1:%[0-9]+]]:er = MOV_RLC_imm10_pseudo -4 | ||
; CHECK-NEXT: [[ASHL:%[0-9]+]]:er = ASHL [[EXTENDs8_]], [[MOV_RLC_imm10_pseudo1]] | ||
; CHECK-NEXT: $r0 = COPY [[ASHL]] | ||
%0:_(s32) = COPY $r6 | ||
%1:_(s32) = G_CONSTANT i32 4 | ||
%2:_(s32) = G_SHL %0, %1 | ||
%3:_(s32) = G_SEXT_INREG %2, 8 | ||
%4:_(s32) = G_ASHR %3, %1 | ||
$r0 = COPY %4 | ||
... | ||
|
Oops, something went wrong.