[llvm] r254075 - [WebAssembly] Codegen support for ISD::ExternalSymbol
JF Bastien via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 25 09:51:29 PST 2015
Could you comment on how this interacts with:
http://reviews.llvm.org/rL251534
Your intent is just to allow user-called memcpy? Is it a temporary thing
until we do proper linking and have a real libc?
On Wed, Nov 25, 2015 at 8:44 AM, Dan Gohman via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: djg
> Date: Wed Nov 25 10:44:29 2015
> New Revision: 254075
>
> URL: http://llvm.org/viewvc/llvm-project?rev=254075&view=rev
> Log:
> [WebAssembly] Codegen support for ISD::ExternalSymbol
>
> Modified:
> llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
> llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td
> llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
> llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.h
> llvm/trunk/test/CodeGen/WebAssembly/global.ll
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp?rev=254075&r1=254074&r2=254075&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
> (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp Wed Nov
> 25 10:44:29 2015
> @@ -114,6 +114,7 @@ WebAssemblyTargetLowering::WebAssemblyTa
> computeRegisterProperties(Subtarget->getRegisterInfo());
>
> setOperationAction(ISD::GlobalAddress, MVTPtr, Custom);
> + setOperationAction(ISD::ExternalSymbol, MVTPtr, Custom);
> setOperationAction(ISD::JumpTable, MVTPtr, Custom);
>
> for (auto T : {MVT::f32, MVT::f64}) {
> @@ -412,6 +413,8 @@ SDValue WebAssemblyTargetLowering::Lower
> return SDValue();
> case ISD::GlobalAddress:
> return LowerGlobalAddress(Op, DAG);
> + case ISD::ExternalSymbol:
> + return LowerExternalSymbol(Op, DAG);
> case ISD::JumpTable:
> return LowerJumpTable(Op, DAG);
> case ISD::BR_JT:
> @@ -433,6 +436,16 @@ SDValue WebAssemblyTargetLowering::Lower
> DAG.getTargetGlobalAddress(GA->getGlobal(), DL, VT));
> }
>
> +SDValue WebAssemblyTargetLowering::LowerExternalSymbol(SDValue Op,
> + SelectionDAG &DAG)
> const {
> + SDLoc DL(Op);
> + const auto *ES = cast<ExternalSymbolSDNode>(Op);
> + EVT VT = Op.getValueType();
> + assert(ES->getTargetFlags() == 0 && "WebAssembly doesn't set target
> flags");
> + return DAG.getNode(WebAssemblyISD::Wrapper, DL, VT,
> + DAG.getTargetExternalSymbol(ES->getSymbol(), VT));
> +}
> +
> SDValue WebAssemblyTargetLowering::LowerJumpTable(SDValue Op,
> SelectionDAG &DAG)
> const {
> // There's no need for a Wrapper node because we always incorporate a
> jump
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td?rev=254075&r1=254074&r2=254075&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td Wed Nov 25
> 10:44:29 2015
> @@ -125,8 +125,10 @@ def CONST_F64 : I<(outs F64:$res), (ins
> [(set F64:$res, fpimm:$imm)],
> "f64.const\t$res, $imm">;
>
> -def : Pat<(i32 (WebAssemblywrapper tglobaladdr :$dst)),
> - (CONST_I32 tglobaladdr :$dst)>;
> +def : Pat<(i32 (WebAssemblywrapper tglobaladdr:$dst)),
> + (CONST_I32 tglobaladdr:$dst)>;
> +def : Pat<(i32 (WebAssemblywrapper texternalsym:$dst)),
> + (CONST_I32 texternalsym:$dst)>;
>
> def JUMP_TABLE : I<(outs I32:$dst), (ins tjumptable_op:$addr),
> [(set I32:$dst, (WebAssemblywrapper
> tjumptable:$addr))],
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp?rev=254075&r1=254074&r2=254075&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp Wed Nov
> 25 10:44:29 2015
> @@ -34,6 +34,11 @@ WebAssemblyMCInstLower::GetGlobalAddress
> return Printer.getSymbol(MO.getGlobal());
> }
>
> +MCSymbol *
> +WebAssemblyMCInstLower::GetExternalSymbolSymbol(const MachineOperand &MO)
> const {
> + return Printer.GetExternalSymbolSymbol(MO.getSymbolName());
> +}
> +
> MCOperand WebAssemblyMCInstLower::LowerSymbolOperand(const MachineOperand
> &MO,
> MCSymbol *Sym) const
> {
>
> @@ -90,6 +95,9 @@ void WebAssemblyMCInstLower::Lower(const
> case MachineOperand::MO_GlobalAddress:
> MCOp = LowerSymbolOperand(MO, GetGlobalAddressSymbol(MO));
> break;
> + case MachineOperand::MO_ExternalSymbol:
> + MCOp = LowerSymbolOperand(MO, GetExternalSymbolSymbol(MO));
> + break;
> }
>
> OutMI.addOperand(MCOp);
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.h?rev=254075&r1=254074&r2=254075&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.h (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyMCInstLower.h Wed Nov 25
> 10:44:29 2015
> @@ -44,6 +44,7 @@ public:
> MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym)
> const;
>
> MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const;
> + MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const;
> };
> }
>
>
> Modified: llvm/trunk/test/CodeGen/WebAssembly/global.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/global.ll?rev=254075&r1=254074&r2=254075&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WebAssembly/global.ll (original)
> +++ llvm/trunk/test/CodeGen/WebAssembly/global.ll Wed Nov 25 10:44:29 2015
> @@ -18,6 +18,18 @@ define i32 @foo() {
> ret i32 %a
> }
>
> +; CHECK-LABEL: call_memcpy:
> +; CHECK-NEXT: .param i32, i32, i32{{$}}
> +; CHECK-NEXT: .result i32{{$}}
> +; CHECK-NEXT: i32.const $push0=, memcpy{{$}}
> +; CHECK-NEXT: call_indirect $pop0, $0, $1, $2{{$}}
> +; CHECK-NEXT: return $0{{$}}
> +declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture
> readonly, i32, i32, i1)
> +define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) {
> + tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %p, i8* %q, i32 %n, i32
> 1, i1 false)
> + ret i8* %p
> +}
> +
> ; CHECK: .type g, at object
> ; CHECK: .align 2{{$}}
> ; CHECK-NEXT: g:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151125/1e367d75/attachment.html>
More information about the llvm-commits
mailing list