Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[GlobalISel] Fix crash in applyShiftOfShiftedLogic caused by CSEMIRBu…
…ilder reuse instruction If LogicNonShiftReg is the same to Shift1Base, and shift1 const is the same to MatchInfo.Shift2 const, CSEMIRBuilder will reuse the old shift1 when build shift2. So, if we erase MatchInfo.Shift2 at the end, actually we remove old shift1. And it will cause crash later. Solution for this issue is just erase it earlier to avoid the crash. Fix #58423 Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D138187
- Loading branch information
Showing
2 changed files
with
23 additions
and
2 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -global-isel -global-isel-abort=0 | FileCheck %s | ||
|
||
; this used to crash | ||
define i32 @f(i32 %a) { | ||
; CHECK-LABEL: f: | ||
; CHECK: // %bb.0: | ||
; CHECK-NEXT: lsl w8, w0, #8 | ||
; CHECK-NEXT: orr w0, w8, w0, lsl #16 | ||
; CHECK-NEXT: ret | ||
%shl = shl i32 %a, 8 | ||
%or = or i32 %a, %shl | ||
%r = shl i32 %or, 8 | ||
ret i32 %r | ||
} |