Don't generate lshr for cb array indexing. (#812)
This commit is contained in:
Родитель
0b309e9faf
Коммит
259d6624e6
|
@ -5315,8 +5315,7 @@ void TranslateCBGepLegacy(GetElementPtrInst *GEP, Value *handle,
|
|||
unsigned idxInc = tempOffset >> 4;
|
||||
legacyIndex = Builder.CreateAdd(legacyIndex, hlslOP->GetU32Const(idxInc));
|
||||
} else {
|
||||
Value *tempOffset = Builder.CreateMul(idx, hlslOP->GetU32Const(size));
|
||||
Value *idxInc = Builder.CreateLShr(tempOffset, 4);
|
||||
Value *idxInc = Builder.CreateMul(idx, hlslOP->GetU32Const(size>>4));
|
||||
legacyIndex = Builder.CreateAdd(legacyIndex, idxInc);
|
||||
}
|
||||
|
||||
|
@ -5366,8 +5365,7 @@ void TranslateCBGepLegacy(GetElementPtrInst *GEP, Value *handle,
|
|||
unsigned idxInc = tempOffset >> 4;
|
||||
legacyIndex = Builder.CreateAdd(legacyIndex, hlslOP->GetU32Const(idxInc));
|
||||
} else {
|
||||
Value *tempOffset = Builder.CreateMul(idx, hlslOP->GetU32Const(size));
|
||||
Value *idxInc = Builder.CreateLShr(tempOffset, 4);
|
||||
Value *idxInc = Builder.CreateMul(idx, hlslOP->GetU32Const(size>>4));
|
||||
legacyIndex = Builder.CreateAdd(legacyIndex, idxInc);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
|
||||
|
||||
// Make sure no lshr created for cbuffer array.
|
||||
// CHECK-NOT: lshr
|
||||
// CHECK:[[ID:[^ ]+]] = call i32 @dx.op.loadInput.i32
|
||||
// CHECK:[[ADD:[^ ]+]] = add nsw i32 [[ID]], 2
|
||||
// CHECK:call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %"$Globals_buffer", i32 [[ADD]])
|
||||
|
||||
|
||||
float A[6] : register(b0);
|
||||
float main(int i : A) : SV_TARGET
|
||||
{
|
||||
return A[i] + A[i+1] + A[i+2] ;
|
||||
}
|
Загрузка…
Ссылка в новой задаче