[NVPTX] Use different, convergent MIs for convergent calls.
authorJustin Lebar <jlebar@google.com>
Tue, 1 Mar 2016 19:24:03 +0000 (19:24 +0000)
committerJustin Lebar <jlebar@google.com>
Tue, 1 Mar 2016 19:24:03 +0000 (19:24 +0000)
commitb5ca00a58de52d33c1935f49ce104f9d90cda67c
tree9f51d1461cb3017df95bdb34f3bb02b646896d3e
parent93e7a9b91c931ea65e6974ab7dfef93ce1359176
[NVPTX] Use different, convergent MIs for convergent calls.

Summary:
Calls sometimes need to be convergent.  This is already handled at the
LLVM IR level, but it also needs to be handled at the MI level.

Ideally we'd propagate convergence from instructions, down through the
selection DAG, and into MIs.  But this is Hard, and would affect
optimizations in the SDNs -- right now only SDNs with two operands have
any flags at all.

Instead, here's a much simpler hack: Add new opcodes for NVPTX for
convergent calls, and generate these when lowering convergent LLVM
calls.

Reviewers: jholewinski

Subscribers: jholewinski, chandlerc, joker.eph, jhen, tra, llvm-commits

Differential Revision: http://reviews.llvm.org/D17423

llvm-svn: 262373
llvm/include/llvm/Target/TargetLowering.h
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
llvm/lib/Target/NVPTX/NVPTXISelLowering.h
llvm/lib/Target/NVPTX/NVPTXInstrInfo.td
llvm/test/CodeGen/NVPTX/convergent-mir-call.ll [new file with mode: 0644]