[llvm-commits] [llvm] r152613 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp

NAKAMURA Takumi geek4civic at gmail.com
Thu Mar 15 15:35:49 PDT 2012


2012/3/13 Bill Wendling <isanbard at gmail.com>:
> Author: void
> Date: Tue Mar 13 00:51:56 2012
> New Revision: 152613
>
> URL: http://llvm.org/viewvc/llvm-project?rev=152613&view=rev
> Log:
> Inline the d'tor and add an anchor instead.
>
> Modified:
>    llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=152613&r1=152612&r2=152613&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Tue Mar 13 00:51:56 2012
> @@ -820,8 +820,9 @@
>   /// the DAG can optionally implement this interface.  This allows the clients
>   /// to handle the various sorts of updates that happen.
>   class DAGUpdateListener {
> +    virtual void anchor();
>   public:
> -    virtual ~DAGUpdateListener();
> +    virtual ~DAGUpdateListener() {}
>
>     /// NodeDeleted - The node N that was deleted and, if E is not null, an
>     /// equivalent node E that replaced it.

Bill, it is miscompiled by g++-4.4 (I saw in 4.4.4 and 4.4.6)
Any idea? Could I revert yours?

...Takumi

// Small testcase
class DAGUpdateListener {
public:
  virtual void vvv() = 0;
  virtual ~DAGUpdateListener() {}
};

class ISelUpdater: public DAGUpdateListener {
public:
  void vvv() {}
};

extern void bar(DAGUpdateListener& q);

static inline void ReplaceUses() {
  ISelUpdater q;
  bar(q);
}

void MSP430SelectIndexedBinOp() {
  ReplaceUses();
  ReplaceUses(); // It sets base class's vtable to 2nd ISU
}


_Z24MSP430SelectIndexedBinOpv:
        pushq   %rbx
        subq    $16, %rsp
        movq    %rsp, %rdi
        movq    $_ZTV11ISelUpdater+16, (%rsp)
        call    _Z3barR17DAGUpdateListener
        movq    %rsp, %rdi
        movq    $_ZTV17DAGUpdateListener+16, (%rsp) //// IMPOSSIBLE!
        call    _Z3barR17DAGUpdateListener
        addq    $16, %rsp
        popq    %rbx
        ret




More information about the llvm-commits mailing list