Compare commits
13 Commits
main
...
users/myst
Author | SHA1 | Date | |
---|---|---|---|
![]() |
341dd6a3ca | ||
![]() |
75c4d315dc | ||
![]() |
904c996355 | ||
![]() |
a6220fef9b | ||
![]() |
20f2ad062c | ||
![]() |
6fc858761e | ||
![]() |
57ba236e87 | ||
![]() |
07ccb63a1b | ||
![]() |
dd58f21c9e | ||
![]() |
bd4dd9ca02 | ||
![]() |
5a056672cb | ||
![]() |
0e830ad120 | ||
![]() |
f3fdeff3e3 |
@ -30630,6 +30630,38 @@ This intrinsic does nothing, but optimizers must consider it a use of its single
|
|||||||
operand and should try to preserve the intrinsic and its position in the
|
operand and should try to preserve the intrinsic and its position in the
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
.. _llvm_reloc_none:
|
||||||
|
|
||||||
|
'``llvm.reloc.none``' Intrinsic
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Syntax:
|
||||||
|
"""""""
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
declare void @llvm.reloc.none(ptrty %ptr)
|
||||||
|
|
||||||
|
Overview:
|
||||||
|
"""""""""
|
||||||
|
|
||||||
|
The ``llvm.reloc.none`` intrinsic emits a no-op relocation against a given
|
||||||
|
operand symbol. This can bring the symbol
|
||||||
|
definition into the link without emitting any code or data to the binary for
|
||||||
|
that purpose.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
""""""""""
|
||||||
|
|
||||||
|
The ``llvm.reloc.none`` intrinsic takes one argument, which may be any global
|
||||||
|
value.
|
||||||
|
|
||||||
|
Semantics:
|
||||||
|
""""""""""
|
||||||
|
|
||||||
|
This intrinsic emits a no-op relocation at the location of the intrinsic call
|
||||||
|
for the symbol that corresponds to the global value argument.
|
||||||
|
|
||||||
|
|
||||||
Stack Map Intrinsics
|
Stack Map Intrinsics
|
||||||
--------------------
|
--------------------
|
||||||
|
@ -1531,6 +1531,9 @@ enum NodeType {
|
|||||||
#define BEGIN_REGISTER_VP_SDNODE(VPSDID, ...) VPSDID,
|
#define BEGIN_REGISTER_VP_SDNODE(VPSDID, ...) VPSDID,
|
||||||
#include "llvm/IR/VPIntrinsics.def"
|
#include "llvm/IR/VPIntrinsics.def"
|
||||||
|
|
||||||
|
// Issue a no-op relocation against a given symbol at the current location.
|
||||||
|
RELOC_NONE,
|
||||||
|
|
||||||
// The `llvm.experimental.convergence.*` intrinsics.
|
// The `llvm.experimental.convergence.*` intrinsics.
|
||||||
CONVERGENCECTRL_ANCHOR,
|
CONVERGENCECTRL_ANCHOR,
|
||||||
CONVERGENCECTRL_ENTRY,
|
CONVERGENCECTRL_ENTRY,
|
||||||
|
@ -473,6 +473,7 @@ private:
|
|||||||
void Select_WRITE_REGISTER(SDNode *Op);
|
void Select_WRITE_REGISTER(SDNode *Op);
|
||||||
void Select_UNDEF(SDNode *N);
|
void Select_UNDEF(SDNode *N);
|
||||||
void Select_FAKE_USE(SDNode *N);
|
void Select_FAKE_USE(SDNode *N);
|
||||||
|
void Select_RELOC_NONE(SDNode *N);
|
||||||
void CannotYetSelect(SDNode *N);
|
void CannotYetSelect(SDNode *N);
|
||||||
|
|
||||||
void Select_FREEZE(SDNode *N);
|
void Select_FREEZE(SDNode *N);
|
||||||
|
@ -1913,6 +1913,9 @@ def int_threadlocal_address : DefaultAttrsIntrinsic<[llvm_anyptr_ty], [LLVMMatch
|
|||||||
def int_stepvector : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
|
def int_stepvector : DefaultAttrsIntrinsic<[llvm_anyvector_ty],
|
||||||
[], [IntrNoMem]>;
|
[], [IntrNoMem]>;
|
||||||
|
|
||||||
|
def int_reloc_none : DefaultAttrsIntrinsic<[], [llvm_ptr_ty],
|
||||||
|
[IntrHasSideEffects, IntrInaccessibleMemOnly, IntrWillReturn]>;
|
||||||
|
|
||||||
//===---------------- Vector Predication Intrinsics --------------===//
|
//===---------------- Vector Predication Intrinsics --------------===//
|
||||||
// Memory Intrinsics
|
// Memory Intrinsics
|
||||||
def int_vp_store : DefaultAttrsIntrinsic<[],
|
def int_vp_store : DefaultAttrsIntrinsic<[],
|
||||||
|
@ -233,6 +233,9 @@ HANDLE_TARGET_OPCODE(MEMBARRIER)
|
|||||||
// using.
|
// using.
|
||||||
HANDLE_TARGET_OPCODE(JUMP_TABLE_DEBUG_INFO)
|
HANDLE_TARGET_OPCODE(JUMP_TABLE_DEBUG_INFO)
|
||||||
|
|
||||||
|
// Issue a no-op relocation against a given symbol at the current location.
|
||||||
|
HANDLE_TARGET_OPCODE(RELOC_NONE)
|
||||||
|
|
||||||
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_ENTRY)
|
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_ENTRY)
|
||||||
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_ANCHOR)
|
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_ANCHOR)
|
||||||
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_LOOP)
|
HANDLE_TARGET_OPCODE(CONVERGENCECTRL_LOOP)
|
||||||
|
@ -1532,6 +1532,11 @@ def JUMP_TABLE_DEBUG_INFO : StandardPseudoInstruction {
|
|||||||
let Size = 0;
|
let Size = 0;
|
||||||
let isMeta = true;
|
let isMeta = true;
|
||||||
}
|
}
|
||||||
|
def RELOC_NONE : StandardPseudoInstruction {
|
||||||
|
let OutOperandList = (outs);
|
||||||
|
let InOperandList = (ins unknown:$symbol);
|
||||||
|
let hasSideEffects = true;
|
||||||
|
}
|
||||||
|
|
||||||
let hasSideEffects = false, isMeta = true, isConvergent = true in {
|
let hasSideEffects = false, isMeta = true, isConvergent = true in {
|
||||||
def CONVERGENCECTRL_ANCHOR : StandardPseudoInstruction {
|
def CONVERGENCECTRL_ANCHOR : StandardPseudoInstruction {
|
||||||
|
@ -2039,6 +2039,16 @@ void AsmPrinter::emitFunctionBody() {
|
|||||||
// This is only used to influence register allocation behavior, no
|
// This is only used to influence register allocation behavior, no
|
||||||
// actual initialization is needed.
|
// actual initialization is needed.
|
||||||
break;
|
break;
|
||||||
|
case TargetOpcode::RELOC_NONE: {
|
||||||
|
// Generate a temporary label for the current PC.
|
||||||
|
MCSymbol *Sym = OutContext.createTempSymbol("reloc_none");
|
||||||
|
OutStreamer->emitLabel(Sym);
|
||||||
|
const MCExpr *Dot = MCSymbolRefExpr::create(Sym, OutContext);
|
||||||
|
const MCExpr *Value = MCSymbolRefExpr::create(
|
||||||
|
getSymbol(MI.getOperand(0).getGlobal()), OutContext);
|
||||||
|
OutStreamer->emitRelocDirective(*Dot, "BFD_RELOC_NONE", Value, SMLoc());
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
emitInstruction(&MI);
|
emitInstruction(&MI);
|
||||||
|
|
||||||
|
@ -2669,6 +2669,11 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
|
|||||||
case Intrinsic::experimental_convergence_entry:
|
case Intrinsic::experimental_convergence_entry:
|
||||||
case Intrinsic::experimental_convergence_loop:
|
case Intrinsic::experimental_convergence_loop:
|
||||||
return translateConvergenceControlIntrinsic(CI, ID, MIRBuilder);
|
return translateConvergenceControlIntrinsic(CI, ID, MIRBuilder);
|
||||||
|
case Intrinsic::reloc_none: {
|
||||||
|
MIRBuilder.buildInstr(TargetOpcode::RELOC_NONE)
|
||||||
|
.addGlobalAddress(cast<GlobalValue>(CI.getArgOperand(0)));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -7751,6 +7751,17 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Intrinsic::reloc_none: {
|
||||||
|
SDValue V = getValue(I.getArgOperand(0));
|
||||||
|
const auto *GA = cast<GlobalAddressSDNode>(V);
|
||||||
|
SDValue Ops[2];
|
||||||
|
Ops[0] = getRoot();
|
||||||
|
Ops[1] = DAG.getTargetGlobalAddress(GA->getGlobal(), sdl, V.getValueType(),
|
||||||
|
GA->getOffset());
|
||||||
|
DAG.setRoot(DAG.getNode(ISD::RELOC_NONE, sdl, MVT::Other, Ops));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
case Intrinsic::eh_exceptionpointer:
|
case Intrinsic::eh_exceptionpointer:
|
||||||
case Intrinsic::eh_exceptioncode: {
|
case Intrinsic::eh_exceptioncode: {
|
||||||
// Get the exception pointer vreg, copy from it, and resize it to fit.
|
// Get the exception pointer vreg, copy from it, and resize it to fit.
|
||||||
|
@ -471,6 +471,8 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
|
|||||||
case ISD::LIFETIME_END: return "lifetime.end";
|
case ISD::LIFETIME_END: return "lifetime.end";
|
||||||
case ISD::FAKE_USE:
|
case ISD::FAKE_USE:
|
||||||
return "fake_use";
|
return "fake_use";
|
||||||
|
case ISD::RELOC_NONE:
|
||||||
|
return "reloc_none";
|
||||||
case ISD::PSEUDO_PROBE:
|
case ISD::PSEUDO_PROBE:
|
||||||
return "pseudoprobe";
|
return "pseudoprobe";
|
||||||
case ISD::GC_TRANSITION_START: return "gc_transition.start";
|
case ISD::GC_TRANSITION_START: return "gc_transition.start";
|
||||||
|
@ -2521,6 +2521,11 @@ void SelectionDAGISel::Select_FAKE_USE(SDNode *N) {
|
|||||||
N->getOperand(1), N->getOperand(0));
|
N->getOperand(1), N->getOperand(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SelectionDAGISel::Select_RELOC_NONE(SDNode *N) {
|
||||||
|
CurDAG->SelectNodeTo(N, TargetOpcode::RELOC_NONE, N->getValueType(0),
|
||||||
|
N->getOperand(1), N->getOperand(0));
|
||||||
|
}
|
||||||
|
|
||||||
void SelectionDAGISel::Select_FREEZE(SDNode *N) {
|
void SelectionDAGISel::Select_FREEZE(SDNode *N) {
|
||||||
// TODO: We don't have FREEZE pseudo-instruction in MachineInstr-level now.
|
// TODO: We don't have FREEZE pseudo-instruction in MachineInstr-level now.
|
||||||
// If FREEZE instruction is added later, the code below must be changed as
|
// If FREEZE instruction is added later, the code below must be changed as
|
||||||
@ -3296,6 +3301,9 @@ void SelectionDAGISel::SelectCodeCommon(SDNode *NodeToMatch,
|
|||||||
case ISD::FAKE_USE:
|
case ISD::FAKE_USE:
|
||||||
Select_FAKE_USE(NodeToMatch);
|
Select_FAKE_USE(NodeToMatch);
|
||||||
return;
|
return;
|
||||||
|
case ISD::RELOC_NONE:
|
||||||
|
Select_RELOC_NONE(NodeToMatch);
|
||||||
|
return;
|
||||||
case ISD::FREEZE:
|
case ISD::FREEZE:
|
||||||
Select_FREEZE(NodeToMatch);
|
Select_FREEZE(NodeToMatch);
|
||||||
return;
|
return;
|
||||||
|
@ -5921,6 +5921,11 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
|
|||||||
Check(cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue() < 2,
|
Check(cast<ConstantInt>(Call.getArgOperand(3))->getZExtValue() < 2,
|
||||||
"cache type argument to llvm.prefetch must be 0-1", Call);
|
"cache type argument to llvm.prefetch must be 0-1", Call);
|
||||||
break;
|
break;
|
||||||
|
case Intrinsic::reloc_none: {
|
||||||
|
Check(isa<GlobalValue>(Call.getArgOperand(0)),
|
||||||
|
"llvm.reloc.none argument must be a global value", &Call);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Intrinsic::stackprotector:
|
case Intrinsic::stackprotector:
|
||||||
Check(isa<AllocaInst>(Call.getArgOperand(1)->stripPointerCasts()),
|
Check(isa<AllocaInst>(Call.getArgOperand(1)->stripPointerCasts()),
|
||||||
"llvm.stackprotector parameter #2 must resolve to an alloca.", Call);
|
"llvm.stackprotector parameter #2 must resolve to an alloca.", Call);
|
||||||
|
@ -70,11 +70,11 @@
|
|||||||
# DEBUG-NEXT: .. the first uncovered type index: 1, OK
|
# DEBUG-NEXT: .. the first uncovered type index: 1, OK
|
||||||
# DEBUG-NEXT: .. the first uncovered imm index: 0, OK
|
# DEBUG-NEXT: .. the first uncovered imm index: 0, OK
|
||||||
#
|
#
|
||||||
# DEBUG-NEXT: G_ABDS (opcode 65): 1 type index, 0 imm indices
|
# DEBUG-NEXT: G_ABDS (opcode 66): 1 type index, 0 imm indices
|
||||||
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
||||||
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
||||||
#
|
#
|
||||||
# DEBUG-NEXT: G_ABDU (opcode 66): 1 type index, 0 imm indices
|
# DEBUG-NEXT: G_ABDU (opcode 67): 1 type index, 0 imm indices
|
||||||
# DEBUG-NEXT: .. opcode {{[0-9]+}} is aliased to {{[0-9]+}}
|
# DEBUG-NEXT: .. opcode {{[0-9]+}} is aliased to {{[0-9]+}}
|
||||||
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
||||||
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
||||||
|
13
llvm/test/CodeGen/Generic/reloc-none.ll
Normal file
13
llvm/test/CodeGen/Generic/reloc-none.ll
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
; RUN: llc < %s | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: .reloc {{.*}}, BFD_RELOC_NONE, foo
|
||||||
|
|
||||||
|
%1 = type opaque
|
||||||
|
@foo = external global %1
|
||||||
|
|
||||||
|
define void @test_reloc_none() {
|
||||||
|
call void @llvm.reloc.none(ptr @foo)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
declare void @llvm.reloc.none(ptr)
|
@ -72,11 +72,11 @@
|
|||||||
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
|
||||||
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
|
||||||
#
|
#
|
||||||
# DEBUG-NEXT: G_ABDS (opcode 65): 1 type index, 0 imm indices
|
# DEBUG-NEXT: G_ABDS (opcode 66): 1 type index, 0 imm indices
|
||||||
# DEBUG-NEXT:.. type index coverage check SKIPPED: no rules defined
|
# DEBUG-NEXT:.. type index coverage check SKIPPED: no rules defined
|
||||||
# DEBUG-NEXT:.. imm index coverage check SKIPPED: no rules defined
|
# DEBUG-NEXT:.. imm index coverage check SKIPPED: no rules defined
|
||||||
#
|
#
|
||||||
# DEBUG-NEXT:G_ABDU (opcode 66): 1 type index, 0 imm indices
|
# DEBUG-NEXT:G_ABDU (opcode 67): 1 type index, 0 imm indices
|
||||||
# DEBUG-NEXT:.. type index coverage check SKIPPED: no rules defined
|
# DEBUG-NEXT:.. type index coverage check SKIPPED: no rules defined
|
||||||
# DEBUG-NEXT:.. imm index coverage check SKIPPED: no rules defined
|
# DEBUG-NEXT:.. imm index coverage check SKIPPED: no rules defined
|
||||||
#
|
#
|
||||||
|
17
llvm/test/CodeGen/X86/GlobalISel/reloc-none.ll
Normal file
17
llvm/test/CodeGen/X86/GlobalISel/reloc-none.ll
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||||
|
; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=CHECK
|
||||||
|
|
||||||
|
%1 = type opaque
|
||||||
|
@foo = external global %1
|
||||||
|
|
||||||
|
define void @test_reloc_none() {
|
||||||
|
; CHECK-LABEL: test_reloc_none:
|
||||||
|
; CHECK: # %bb.0:
|
||||||
|
; CHECK-NEXT: .Lreloc_none0:
|
||||||
|
; CHECK-NEXT: .reloc .Lreloc_none0, BFD_RELOC_NONE, foo
|
||||||
|
; CHECK-NEXT: retq
|
||||||
|
call void @llvm.reloc.none(ptr @foo)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
declare void @llvm.reloc.none(ptr)
|
@ -15,10 +15,10 @@ class I : Instruction {
|
|||||||
// CHECK-NEXT: MCD::OPC_ExtractField, 0, 64,
|
// CHECK-NEXT: MCD::OPC_ExtractField, 0, 64,
|
||||||
// CHECK-NEXT: MCD::OPC_FilterValue, 1, 8, 0,
|
// CHECK-NEXT: MCD::OPC_FilterValue, 1, 8, 0,
|
||||||
// CHECK-NEXT: MCD::OPC_CheckFieldOrFail, 127, 1, 1,
|
// CHECK-NEXT: MCD::OPC_CheckFieldOrFail, 127, 1, 1,
|
||||||
// CHECK-NEXT: MCD::OPC_Decode, 187, 2, 0,
|
// CHECK-NEXT: MCD::OPC_Decode, 188, 2, 0,
|
||||||
// CHECK-NEXT: MCD::OPC_FilterValueOrFail, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
|
// CHECK-NEXT: MCD::OPC_FilterValueOrFail, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1,
|
||||||
// CHECK-NEXT: MCD::OPC_CheckFieldOrFail, 127, 1, 0,
|
// CHECK-NEXT: MCD::OPC_CheckFieldOrFail, 127, 1, 0,
|
||||||
// CHECK-NEXT: MCD::OPC_Decode, 186, 2, 0,
|
// CHECK-NEXT: MCD::OPC_Decode, 187, 2, 0,
|
||||||
// CHECK-NEXT: MCD::OPC_Fail,
|
// CHECK-NEXT: MCD::OPC_Fail,
|
||||||
// CHECK-NEXT: 0
|
// CHECK-NEXT: 0
|
||||||
// CHECK-NEXT: };
|
// CHECK-NEXT: };
|
||||||
|
@ -96,7 +96,7 @@ def MyCombiner: GICombiner<"GenMyCombiner", [
|
|||||||
|
|
||||||
// CHECK: const uint8_t *GenMyCombiner::getMatchTable() const {
|
// CHECK: const uint8_t *GenMyCombiner::getMatchTable() const {
|
||||||
// CHECK-NEXT: constexpr static uint8_t MatchTable0[] = {
|
// CHECK-NEXT: constexpr static uint8_t MatchTable0[] = {
|
||||||
// CHECK-NEXT: /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(99), GIMT_Encode2(210), /*)*//*default:*//*Label 5*/ GIMT_Encode4(520),
|
// CHECK-NEXT: /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(100), GIMT_Encode2(211), /*)*//*default:*//*Label 5*/ GIMT_Encode4(520),
|
||||||
// CHECK-NEXT: /* 10 */ /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4(454), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
|
// CHECK-NEXT: /* 10 */ /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4(454), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
|
||||||
// CHECK-NEXT: /* 182 */ /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4(472), GIMT_Encode4(0),
|
// CHECK-NEXT: /* 182 */ /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4(472), GIMT_Encode4(0),
|
||||||
// CHECK-NEXT: /* 190 */ /*TargetOpcode::G_ZEXT*//*Label 2*/ GIMT_Encode4(484), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
|
// CHECK-NEXT: /* 190 */ /*TargetOpcode::G_ZEXT*//*Label 2*/ GIMT_Encode4(484), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
|
||||||
|
13
llvm/test/Verifier/reloc-none.ll
Normal file
13
llvm/test/Verifier/reloc-none.ll
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
; RUN: not llvm-as -disable-output 2>&1 %s | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: llvm.reloc.none argument must be a global value
|
||||||
|
; CHECK-NEXT: call void @llvm.reloc.none(ptr %foo)
|
||||||
|
|
||||||
|
define void @test_reloc_none_bad_arg(ptr %foo) {
|
||||||
|
call void @llvm.reloc.none(ptr %foo)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
declare void @llvm.reloc.none(ptr)
|
||||||
|
|
||||||
|
!0 = !{}
|
Loading…
x
Reference in New Issue
Block a user