[SYCL][L0] Support for >4Gb device allocations.#3840
Conversation
Signed-off-by: Sergey V Maslov <sergey.v.maslov@intel.com>
|
@smaslov-intel, please, address pre-commit failure. |
@bader , the changes in PR revealed an issue in the Level Zero driver that is being addressed. |
Let's mark these tests as "expected to fail" until driver update. |
Disabled USM/badmalloc in intel/llvm-test-suite#298 |
…arget address hexadecimal form This is similar to ADRP and matches GNU objdump: GNU objdump: ``` 0000000000200100 <_start>: 200100: adr x0, 201000 <_start+0xf00> ``` llvm-objdump (before patch): ``` 0000000000200100 <_start>: 200100: adr x0, #3840 ``` llvm-objdump (after patch): ``` 0000000000200100 <_start>: 200100: adr x0, 0x201000 <_start+0xf00> ``` Reviewed By: simon_tatham, peter.smith Differential Revision: https://reviews.llvm.org/D144079
Inspired by recent discussion whether we should validate each
instruction and what is cost for it - surprisingly the checks themselves
were cheap, the cost came from the way checkError was written.
The function constructed a std::stringstream unconditionally, *before*
the early-out taken when the condition is satisfied, and the SPIRVCK /
SPIRVCKRT macros built a std::string ("std::string() + (ErrMsg)") at
every call site. Both costs were therefore paid even on the error check
success path.
Moved "std::stringstream SS" past the early-out in checkError(). Added a
const char* checkError overload that returns before constructing any
std::string when the condition holds.
Changed SPIRVCK/SPIRVCKRT to pass the message through directly.
On OpVariable-heavy modules it improves translation time by 5-10%.
Assisted-By: Claude Fable 5
Original commit:
KhronosGroup/SPIRV-LLVM-Translator@7d7593251d75942
E2E test is coming in intel/llvm-test-suite#298.
Signed-off-by: Sergey V Maslov sergey.v.maslov@intel.com