Don't generate lshr for cb array indexing. (#812)

This commit is contained in:
Xiang Li 2017-11-17 10:54:05 -08:00 коммит произвёл GitHub
Родитель 0b309e9faf
Коммит 259d6624e6
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 16 добавлений и 4 удалений

Просмотреть файл

@ -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] ;
}