[NVPTX] Drop memory references of LDG/LDU
authorAndrew Savonichev <andrew.savonichev@gmail.com>
Wed, 11 Jan 2023 17:48:06 +0000 (20:48 +0300)
committerAndrew Savonichev <andrew.savonichev@gmail.com>
Sat, 14 Jan 2023 21:10:49 +0000 (00:10 +0300)
commit75345fb11638ff4c3f4c6c691dbb6c4f72e6666f
treed16af440d9605e580ddec58c8ec16e5912c6d7db
parent6ad0788c332bb2043142954d300c49ac3e537f34
[NVPTX] Drop memory references of LDG/LDU

This patch fixes machine verifier errors:

    *** Bad machine code: Missing mayLoad flag ***
    - function:    foo1
    - basic block: %bb.0  (0x5560fc64ef08)
    - instruction: %4:float32regs =
INT_PTX_LDG_GLOBAL_f32areg64 killed %3:int64regs
:: (load (s32) from %ir.from1, addrspace 1)

mayLoad flag is missing because LDG and LDU instructions operate on
read-only memory, so we want to treat them as regular instructions and
exclude them from memory analysis.

Machine verifier checks for memoperands to determine whether an
instruction is a load, so dropping them during lowering fixes the
problem.

Differential Revision: https://reviews.llvm.org/D112466
llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp
llvm/test/CodeGen/NVPTX/bug26185-2.ll
llvm/test/CodeGen/NVPTX/bug26185.ll
llvm/test/CodeGen/NVPTX/ldg-invariant.ll
llvm/test/CodeGen/NVPTX/ldu-i8.ll
llvm/test/CodeGen/NVPTX/ldu-reg-plus-offset.ll
llvm/test/CodeGen/NVPTX/load-with-non-coherent-cache.ll
llvm/test/CodeGen/NVPTX/read-global-variable-constant.ll