[llvm] 0d9f919 - DAG: Use TargetConstant for FENCE operands

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 6 08:36:56 PST 2020


Context?

Philip

On 1/2/20 2:16 PM, Matt Arsenault via llvm-commits wrote:
> Author: Matt Arsenault
> Date: 2020-01-02T17:16:10-05:00
> New Revision: 0d9f919b73a62191492fa60792264b2f5966b7c6
>
> URL: https://github.com/llvm/llvm-project/commit/0d9f919b73a62191492fa60792264b2f5966b7c6
> DIFF: https://github.com/llvm/llvm-project/commit/0d9f919b73a62191492fa60792264b2f5966b7c6.diff
>
> LOG: DAG: Use TargetConstant for FENCE operands
>
> Added:
>      
>
> Modified:
>      llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
>      llvm/lib/Target/AArch64/AArch64InstrAtomics.td
>      llvm/lib/Target/AMDGPU/SIInstructions.td
>      llvm/lib/Target/ARM/ARMInstrInfo.td
>      llvm/lib/Target/AVR/AVRInstrInfo.td
>      llvm/lib/Target/PowerPC/PPCInstrInfo.td
>      llvm/lib/Target/RISCV/RISCVInstrInfo.td
>      llvm/lib/Target/Sparc/SparcInstrInfo.td
>
> Removed:
>      
>
>
> ################################################################################
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> index ffc8c3c19a32..e879df2f2d9c 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> @@ -4693,10 +4693,10 @@ void SelectionDAGBuilder::visitFence(const FenceInst &I) {
>     const TargetLowering &TLI = DAG.getTargetLoweringInfo();
>     SDValue Ops[3];
>     Ops[0] = getRoot();
> -  Ops[1] = DAG.getConstant((unsigned)I.getOrdering(), dl,
> -                           TLI.getFenceOperandTy(DAG.getDataLayout()));
> -  Ops[2] = DAG.getConstant(I.getSyncScopeID(), dl,
> -                           TLI.getFenceOperandTy(DAG.getDataLayout()));
> +  Ops[1] = DAG.getTargetConstant((unsigned)I.getOrdering(), dl,
> +                                 TLI.getFenceOperandTy(DAG.getDataLayout()));
> +  Ops[2] = DAG.getTargetConstant(I.getSyncScopeID(), dl,
> +                                 TLI.getFenceOperandTy(DAG.getDataLayout()));
>     DAG.setRoot(DAG.getNode(ISD::ATOMIC_FENCE, dl, MVT::Other, Ops));
>   }
>   
>
> diff  --git a/llvm/lib/Target/AArch64/AArch64InstrAtomics.td b/llvm/lib/Target/AArch64/AArch64InstrAtomics.td
> index 459b53923625..27e1d8ee6b98 100644
> --- a/llvm/lib/Target/AArch64/AArch64InstrAtomics.td
> +++ b/llvm/lib/Target/AArch64/AArch64InstrAtomics.td
> @@ -15,9 +15,9 @@
>   //===----------------------------------
>   let AddedComplexity = 15, Size = 0 in
>   def CompilerBarrier : Pseudo<(outs), (ins i32imm:$ordering),
> -                             [(atomic_fence imm:$ordering, 0)]>, Sched<[]>;
> -def : Pat<(atomic_fence (i64 4), (imm)), (DMB (i32 0x9))>;
> -def : Pat<(atomic_fence (imm), (imm)), (DMB (i32 0xb))>;
> +                             [(atomic_fence timm:$ordering, 0)]>, Sched<[]>;
> +def : Pat<(atomic_fence (i64 4), (timm)), (DMB (i32 0x9))>;
> +def : Pat<(atomic_fence (timm), (timm)), (DMB (i32 0xb))>;
>   
>   //===----------------------------------
>   // Atomic loads
>
> diff  --git a/llvm/lib/Target/AMDGPU/SIInstructions.td b/llvm/lib/Target/AMDGPU/SIInstructions.td
> index 79bbbc1eab60..32c05ae10b6b 100644
> --- a/llvm/lib/Target/AMDGPU/SIInstructions.td
> +++ b/llvm/lib/Target/AMDGPU/SIInstructions.td
> @@ -86,7 +86,7 @@ defm V_INTERP_MOV_F32 : VINTRP_m <
>   //===----------------------------------------------------------------------===//
>   def ATOMIC_FENCE : SPseudoInstSI<
>     (outs), (ins i32imm:$ordering, i32imm:$scope),
> -  [(atomic_fence (i32 imm:$ordering), (i32 imm:$scope))],
> +  [(atomic_fence (i32 timm:$ordering), (i32 timm:$scope))],
>     "ATOMIC_FENCE $ordering, $scope"> {
>     let hasSideEffects = 1;
>     let maybeAtomic = 1;
>
> diff  --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td
> index 1cab1747ff4e..3efe85a7d45c 100644
> --- a/llvm/lib/Target/ARM/ARMInstrInfo.td
> +++ b/llvm/lib/Target/ARM/ARMInstrInfo.td
> @@ -6242,7 +6242,7 @@ def CMP_SWAP_64 : PseudoInst<(outs GPRPair:$Rd, GPR:$temp),
>   }
>   
>   def CompilerBarrier : PseudoInst<(outs), (ins i32imm:$ordering), NoItinerary,
> -                                 [(atomic_fence imm:$ordering, 0)]> {
> +                                 [(atomic_fence timm:$ordering, 0)]> {
>     let hasSideEffects = 1;
>     let Size = 0;
>     let AsmString = "@ COMPILER BARRIER";
>
> diff  --git a/llvm/lib/Target/AVR/AVRInstrInfo.td b/llvm/lib/Target/AVR/AVRInstrInfo.td
> index 3de28ead4176..acf991dcfbb1 100644
> --- a/llvm/lib/Target/AVR/AVRInstrInfo.td
> +++ b/llvm/lib/Target/AVR/AVRInstrInfo.td
> @@ -1310,7 +1310,7 @@ def AtomicLoadOr16  : AtomicLoadOp16<atomic_load_or_16>;
>   def AtomicLoadXor8  : AtomicLoadOp8<atomic_load_xor_8>;
>   def AtomicLoadXor16 : AtomicLoadOp16<atomic_load_xor_16>;
>   def AtomicFence     : Pseudo<(outs), (ins), "atomic_fence",
> -                             [(atomic_fence imm, imm)]>;
> +                             [(atomic_fence timm, timm)]>;
>   
>   // Indirect store from register to data space.
>   def STSKRr : F32DM<0b1,
>
> diff  --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td
> index 8f41bbfcda72..b02e676bc23f 100644
> --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td
> +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td
> @@ -3293,10 +3293,10 @@ def : Pat<(f64 (fpextend f32:$src)),
>   // source: http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
>   // The rule for seq_cst is duplicated to work with both 64 bits and 32 bits
>   // versions of Power.
> -def : Pat<(atomic_fence (i64 7), (imm)), (SYNC 0)>, Requires<[HasSYNC]>;
> -def : Pat<(atomic_fence (i32 7), (imm)), (SYNC 0)>, Requires<[HasSYNC]>;
> -def : Pat<(atomic_fence (imm),   (imm)), (SYNC 1)>, Requires<[HasSYNC]>;
> -def : Pat<(atomic_fence (imm), (imm)), (MSYNC)>, Requires<[HasOnlyMSYNC]>;
> +def : Pat<(atomic_fence (i64 7), (timm)), (SYNC 0)>, Requires<[HasSYNC]>;
> +def : Pat<(atomic_fence (i32 7), (timm)), (SYNC 0)>, Requires<[HasSYNC]>;
> +def : Pat<(atomic_fence (timm), (timm)), (SYNC 1)>, Requires<[HasSYNC]>;
> +def : Pat<(atomic_fence (timm), (timm)), (MSYNC)>, Requires<[HasOnlyMSYNC]>;
>   
>   let Predicates = [HasFPU] in {
>   // Additional FNMSUB patterns: -a*c + b == -(a*c - b)
>
> diff  --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> index 1d7f87072181..1d20dbf4a603 100644
> --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> @@ -1019,13 +1019,13 @@ defm : StPat<store, SW, GPR>, Requires<[IsRV32]>;
>   // Manual: Volume I.
>   
>   // fence acquire -> fence r, rw
> -def : Pat<(atomic_fence (XLenVT 4), (imm)), (FENCE 0b10, 0b11)>;
> +def : Pat<(atomic_fence (XLenVT 4), (timm)), (FENCE 0b10, 0b11)>;
>   // fence release -> fence rw, w
> -def : Pat<(atomic_fence (XLenVT 5), (imm)), (FENCE 0b11, 0b1)>;
> +def : Pat<(atomic_fence (XLenVT 5), (timm)), (FENCE 0b11, 0b1)>;
>   // fence acq_rel -> fence.tso
> -def : Pat<(atomic_fence (XLenVT 6), (imm)), (FENCE_TSO)>;
> +def : Pat<(atomic_fence (XLenVT 6), (timm)), (FENCE_TSO)>;
>   // fence seq_cst -> fence rw, rw
> -def : Pat<(atomic_fence (XLenVT 7), (imm)), (FENCE 0b11, 0b11)>;
> +def : Pat<(atomic_fence (XLenVT 7), (timm)), (FENCE 0b11, 0b11)>;
>   
>   // Lowering for atomic load and store is defined in RISCVInstrInfoA.td.
>   // Although these are lowered to fence+load/store instructions defined in the
>
> diff  --git a/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td
> index 7ebfef4ced8d..f26f4a1c1a84 100644
> --- a/llvm/lib/Target/Sparc/SparcInstrInfo.td
> +++ b/llvm/lib/Target/Sparc/SparcInstrInfo.td
> @@ -1676,10 +1676,10 @@ def : Pat<(store (i32 0), ADDRri:$dst), (STri ADDRri:$dst, (i32 G0))>;
>   
>   // store bar for all atomic_fence in V8.
>   let Predicates = [HasNoV9] in
> -  def : Pat<(atomic_fence imm, imm), (STBAR)>;
> +  def : Pat<(atomic_fence timm, timm), (STBAR)>;
>   
>   let Predicates = [HasV9] in
> -  def : Pat<(atomic_fence imm, imm), (MEMBARi 0xf)>;
> +  def : Pat<(atomic_fence timm, timm), (MEMBARi 0xf)>;
>   
>   // atomic_load addr -> load addr
>   def : Pat<(i32 (atomic_load_8 ADDRrr:$src)), (LDUBrr ADDRrr:$src)>;
>
>
>          
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list