[llvm-commits] [llvm] r134286 - in /llvm/trunk: lib/Target/X86/X86ISelDAGToDAG.cpp test/CodeGen/X86/atomic-or.ll

Francois Pichet pichet2000 at gmail.com
Fri Jul 1 20:31:26 PDT 2011


On Fri, Jul 1, 2011 at 7:04 PM, Eric Christopher <echristo at apple.com> wrote:
> Author: echristo
> Date: Fri Jul  1 18:04:38 2011
> New Revision: 134286
>
> URL: http://llvm.org/viewvc/llvm-project?rev=134286&view=rev
> Log:
> TargetConstant immediates won't be placed into registers so tighten
> up the valid constant check earlier.
>
> rdar://9692967
>
> Modified:
>    llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
>    llvm/trunk/test/CodeGen/X86/atomic-or.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=134286&r1=134285&r2=134286&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelDAGToDAG.cpp Fri Jul  1 18:04:38 2011
> @@ -23,6 +23,7 @@
>  #include "llvm/Intrinsics.h"
>  #include "llvm/Support/CFG.h"
>  #include "llvm/Type.h"
> +#include "llvm/CodeGen/FunctionLoweringInfo.h"
>  #include "llvm/CodeGen/MachineConstantPool.h"
>  #include "llvm/CodeGen/MachineFunction.h"
>  #include "llvm/CodeGen/MachineFrameInfo.h"
> @@ -1351,7 +1352,7 @@
>
>   bool isInc = false, isDec = false, isSub = false, isCN = false;
>   ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Val);
> -  if (CN) {
> +  if (CN && CN->getSExtValue() == (int32_t)CN->getSExtValue()) {
>     isCN = true;
>     int64_t CNVal = CN->getSExtValue();
>     if (CNVal == 1)
> @@ -1371,6 +1372,7 @@
>     Val = Val.getOperand(1);
>   }
>
> +  DebugLoc dl = Node->getDebugLoc();
>   unsigned Opc = 0;
>   switch (NVT.getSimpleVT().SimpleTy) {
>   default: return 0;
> @@ -1462,7 +1464,6 @@
>     break;
>   }
>
> -  DebugLoc dl = Node->getDebugLoc();
>   SDValue Undef = SDValue(CurDAG->getMachineNode(TargetOpcode::IMPLICIT_DEF,
>                                                  dl, NVT), 0);
>   MachineSDNode::mmo_iterator MemOp = MF->allocateMemRefsArray(1);
> @@ -1579,7 +1580,7 @@
>
>   bool isCN = false;
>   ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Val);
> -  if (CN) {
> +  if (CN && (int32_t)CN->getSExtValue() == CN->getSExtValue()) {
>     isCN = true;
>     Val = CurDAG->getTargetConstant(CN->getSExtValue(), NVT);
>   }
>
> Modified: llvm/trunk/test/CodeGen/X86/atomic-or.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/atomic-or.ll?rev=134286&r1=134285&r2=134286&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/atomic-or.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/atomic-or.ll Fri Jul  1 18:04:38 2011
> @@ -2,17 +2,35 @@
>
>  ; rdar://9692967
>
> -define void @do_the_sync(i64* %p, i32 %b) nounwind {
> +define void @t1(i64* %p, i32 %b) nounwind {
>  entry:
>   %p.addr = alloca i64*, align 8
>   store i64* %p, i64** %p.addr, align 8
>   %tmp = load i64** %p.addr, align 8
>   call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
> +; CHECK: t1:
> +; CHECK: movl    $2147483648, %eax
>  ; CHECK: lock
> -; CHECK-NEXT: orq     $2147483648
> +; CHECK-NEXT: orq %rax, (%rdi)
>   %0 = call i64 @llvm.atomic.load.or.i64.p0i64(i64* %tmp, i64 2147483648)
>   call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
>   ret void
>  }
> +
> +define void @t2(i64* %p, i32 %b) nounwind {
> +entry:
> +  %p.addr = alloca i64*, align 8
> +  store i64* %p, i64** %p.addr, align 8
> +  %tmp = load i64** %p.addr, align 8
> +  call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
> +; CHECK: t2:
> +; CHECK-NOT: movl
> +; CHECK: lock
> +; CHECK-NEXT: orq $2147483644, (%rdi)
> +  %0 = call i64 @llvm.atomic.load.or.i64.p0i64(i64* %tmp, i64 2147483644)
> +  call void @llvm.memory.barrier(i1 true, i1 true, i1 true, i1 true, i1 true)
> +  ret void
>

I continue to do finger pointing for a recent MSVC failure:

3>  Command 1 Stderr:
3>  C:/dev/llvm/llvm_trunk2/test/CodeGen/X86/atomic-or.ll:14:15:
error: expected string not found in input
3>  ; CHECK-NEXT: orq %rax, (%rdi)
3>                ^
3>  <stdin>:14:2: note: scanning from here
3>   orq %rax, (%rcx)

I have no idea why it is %rcx on MSVC but the test expects %rdi.




More information about the llvm-commits mailing list