[PATCH] D127115: [RFC][DAGCombine] Make sure combined nodes are added back to the worklist in topological order.
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 17 11:46:34 PDT 2022
spatel added inline comments.
================
Comment at: llvm/test/CodeGen/X86/dagcombine-select.ll:202
+; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
+; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: retq
----------------
RKSimon wrote:
> deadalnix wrote:
> > Looking into this guy, it is not obvious if the backend is the right place to fix it. Previously, the DAG looked like:
> >
> > ```
> > SelectionDAG has 17 nodes:
> > t0: ch = EntryToken
> > t2: i32,ch = CopyFromReg t0, Register:i32 %0
> > t32: i8 = truncate t2
> > t38: i8 = xor t32, Constant:i8<-1>
> > t34: i32 = any_extend t38
> > t36: i32 = and t34, Constant:i32<1>
> > t30: i32 = shl t36, Constant:i8<2>
> > t25: i32 = add t30, Constant:i32<4>
> > t13: ch,glue = CopyToReg t0, Register:i32 $eax, t25
> > t14: ch = X86ISD::RET_FLAG t13, TargetConstant:i32<0>, Register:i32 $eax, t13:1
> > ```
> >
> > Now it does look like:
> > ```
> > SelectionDAG has 14 nodes:
> > t0: ch = EntryToken
> > t2: i32,ch = CopyFromReg t0, Register:i32 %0
> > t22: i8 = truncate t2
> > t24: i8 = and t22, Constant:i8<1>
> > t21: i8 = sub Constant:i8<3>, t24
> > t10: i32 = shl Constant:i32<1>, t21
> > t13: ch,glue = CopyToReg t0, Register:i32 $eax, t10
> > t14: ch = X86ISD::RET_FLAG t13, TargetConstant:i32<0>, Register:i32 $eax, t13:1
> > ```
> >
> > It must be noted that opt will transform this IR into:
> > ```
> > define i32 @shl_constant_sel_constants(i1 %cond) local_unnamed_addr #0 {
> > %bo = select i1 %cond, i32 4, i32 8
> > ret i32 %bo
> > }
> > ```
> >
> > Which, regardless of this patch, compiles to:
> > ```
> > shl_constant_sel_constants: # @shl_constant_sel_constants
> > # %bb.0:
> > notb %dil
> > movzbl %dil, %eax
> > andl $1, %eax
> > leal 4(,%rax,4), %eax
> > retq
> > ```
> >
> > So it seems that this is fine. how do we proceed in such a case? Simply add a second version of that test case with the optimized IR?
> Last person to touch this was @laytonio in D90349 - it looks like this is the same codegen as BEFORE that patch.
D128080 might help this example.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127115/new/
https://reviews.llvm.org/D127115
More information about the llvm-commits
mailing list