Author: laurov Date: Thu Nov 8 11:20:05 2007 New Revision: 43892 URL: http://llvm.org/viewvc/llvm-project?rev=43892&view=rev Log: [ARM] Implement __builtin_thread_pointer.
Added: llvm/trunk/include/llvm/IntrinsicsARM.td llvm/trunk/test/CodeGen/ARM/thread_pointer.ll Modified: llvm/trunk/include/llvm/Intrinsics.td llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Modified: llvm/trunk/include/llvm/Intrinsics.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Intrinsics.td?rev=43892&r1=43891&r2=43892&view=diff ============================================================================== --- llvm/trunk/include/llvm/Intrinsics.td (original) +++ llvm/trunk/include/llvm/Intrinsics.td Thu Nov 8 11:20:05 2007 @@ -268,3 +268,4 @@ include "llvm/IntrinsicsPowerPC.td" include "llvm/IntrinsicsX86.td" +include "llvm/IntrinsicsARM.td" Added: llvm/trunk/include/llvm/IntrinsicsARM.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IntrinsicsARM.td?rev=43892&view=auto ============================================================================== --- llvm/trunk/include/llvm/IntrinsicsARM.td (added) +++ llvm/trunk/include/llvm/IntrinsicsARM.td Thu Nov 8 11:20:05 2007 @@ -0,0 +1,21 @@ +//===- IntrinsicsARM.td - Defines ARM intrinsics -----------*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Lauro Ramos Venancio and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines all of the ARM-specific intrinsics. +// +//===----------------------------------------------------------------------===// + + +//===----------------------------------------------------------------------===// +// TLS + +let TargetPrefix = "arm" in { // All intrinsics start with "llvm.arm.". + def int_arm_thread_pointer : GCCBuiltin<"__builtin_thread_pointer">, + Intrinsic<[llvm_ptr_ty],[IntrNoMem]>; +} Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=43892&r1=43891&r2=43892&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Thu Nov 8 11:20:05 2007 @@ -23,6 +23,7 @@ #include "llvm/CallingConv.h" #include "llvm/Constants.h" #include "llvm/Instruction.h" +#include "llvm/Intrinsics.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" @@ -213,7 +214,10 @@ if (!UseSoftFloat && Subtarget->hasVFP2() && !Subtarget->isThumb()) // Turn f64->i64 into FMRRD iff target supports vfp2. setOperationAction(ISD::BIT_CONVERT, MVT::i64, Custom); - + + // We want to custom lower some of our intrinsics. + setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom); + setOperationAction(ISD::SETCC , MVT::i32, Expand); setOperationAction(ISD::SETCC , MVT::f32, Expand); setOperationAction(ISD::SETCC , MVT::f64, Expand); @@ -882,6 +886,16 @@ return DAG.getNode(ARMISD::PIC_ADD, PtrVT, Result, PICLabel); } +static SDOperand LowerINTRINSIC_WO_CHAIN(SDOperand Op, SelectionDAG &DAG) { + MVT::ValueType PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); + unsigned IntNo = cast<ConstantSDNode>(Op.getOperand(0))->getValue(); + switch (IntNo) { + default: return SDOperand(); // Don't custom lower most intrinsics. + case Intrinsic::arm_thread_pointer: + return DAG.getNode(ARMISD::THREAD_POINTER, PtrVT); + } +} + static SDOperand LowerVASTART(SDOperand Op, SelectionDAG &DAG, unsigned VarArgsFrameIndex) { // vastart just stores the address of the VarArgsFrameIndex slot into the @@ -1410,6 +1424,7 @@ case ISD::FRAMEADDR: break; case ISD::GLOBAL_OFFSET_TABLE: return LowerGLOBAL_OFFSET_TABLE(Op, DAG); case ISD::MEMCPY: return LowerMEMCPY(Op, DAG); + case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG); } return SDOperand(); } Added: llvm/trunk/test/CodeGen/ARM/thread_pointer.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/thread_pointer.ll?rev=43892&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/ARM/thread_pointer.ll (added) +++ llvm/trunk/test/CodeGen/ARM/thread_pointer.ll Thu Nov 8 11:20:05 2007 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=arm -mtriple=arm-linux-gnueabi | \ +; RUN: grep {__aeabi_read_tp} + +define i8* @test() { +entry: + %tmp1 = call i8* @llvm.arm.thread.pointer( ) ; <i8*> [#uses=0] + ret i8* %tmp1 +} + +declare i8* @llvm.arm.thread.pointer() _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits