forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AMDGPU] Fix for AMDGPU MUL_I24 known bits calculation
At present, the code calculating known bits of AMDGPU MUL_I24 confuses the concepts of "non-negative number" and "positive number". In some situations, it results in incorrect code. I have a case where the optimizer replaces the result of calculating MUL_I24(-5, 0) with -8. Differential Revision: https://reviews.llvm.org/D70367 NB: patch was authored by ekuznetsov139; this patch is submitted prior to the submission of the patch to llvm-trunk; there is agreement on the fix; the lit test is still under revision. The patch is submitted to amd-stg-open-hcc to resolve several high-priority internal bugs. Lastly, the lit test was tweaked to fix a syntax error not yet corrected in the phab patch. Change-Id: Iaced35ee4b97946ebb12515f08ea39b9bf5c48ca
- Loading branch information
Showing
3 changed files
with
27 additions
and
9 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
; RUN: llc -mtriple amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck --check-prefix=GCN %s | ||
; GCN: mul | ||
define weak_odr amdgpu_kernel void @test_mul24_knownbits_kernel(float addrspace(1)* %p) { | ||
entry: | ||
%0 = tail call i32 @llvm.amdgcn.workitem.id.x() #28 | ||
%tid = and i32 %0, 3 | ||
%1 = mul nsw i32 %tid, -5 | ||
%v1 = and i32 %1, -32 | ||
%v2 = sext i32 %v1 to i64 | ||
%v3 = getelementptr inbounds float, float addrspace(1)* %p, i64 %v2 | ||
store float 0.000, float addrspace(1)* %v3, align 4 | ||
ret void | ||
} | ||
|
||
; Function Attrs: nounwind readnone speculatable | ||
declare i32 @llvm.amdgcn.workitem.id.x() #20 |