rocrtst: Fix RoundToPowerOf2 function

Compiler behavior is undefined if the right operand is negative,
or greater than or equal to the width of the promoted left operand.
For release builds with address sanitizer enabled, this compiler
optimization behavior leads to unsupported queue size value since
current method shifts till 128 bits on a 64 bit value.

Change-Id: Iddcc15b43d2331bc8bf5fc3aa4725f76844655ec
Signed-off-by: Sreekant Somasekharan <sreekant.somasekharan@amd.com>


[ROCm/ROCR-Runtime commit: ea2f832a43]
이 커밋은 다음에 포함됨:
Sreekant Somasekharan
2023-06-05 18:24:17 -04:00
커밋한 사람 David Yat Sin
부모 63463b14c3
커밋 bf22d10ceb
+6 -7
파일 보기
@@ -103,16 +103,15 @@ int FillRandom(T* arrayPtr,
} }
uint64_t RoundToPowerOf2(uint64_t val) { uint64_t RoundToPowerOf2(uint64_t val) {
int bytes = sizeof(uint64_t);
val--; val--;
/*
for (int i = 0; i < bytes; i++) { * Shift with amount larger than the bit width can result in
val |= val >> (1 << i); * undefined behavior by compiler for release builds.
} * Shift till 32 bit only which is less than bit width of val.
*/
for (int i = 1; i <= 32; i *= 2) val |= val >> i;
val++; val++;
return val; return val;
} }