Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.735 -> 1.736 --- Log message: Eliminate useless insertelement instructions. This implements Transforms/InstCombine/vec_insertelt.ll and fixes PR1286: http://llvm.org/PR1286 . We now compile the code from that bug into: _foo: movl 4(%esp), %eax movdqa (%eax), %xmm0 movl 8(%esp), %ecx psllw (%ecx), %xmm0 movdqa %xmm0, (%eax) ret instead of: _foo: subl $4, %esp movl %ebp, (%esp) movl %esp, %ebp movl 12(%ebp), %eax movdqa (%eax), %xmm0 #IMPLICIT_DEF %eax pinsrw $2, %eax, %xmm0 xorl %ecx, %ecx pinsrw $3, %ecx, %xmm0 pinsrw $4, %eax, %xmm0 pinsrw $5, %ecx, %xmm0 pinsrw $6, %eax, %xmm0 pinsrw $7, %ecx, %xmm0 movl 8(%ebp), %eax movdqa (%eax), %xmm1 psllw %xmm0, %xmm1 movdqa %xmm1, (%eax) movl %ebp, %esp popl %ebp ret woo :) --- Diffs of the changes: (+4 -0) InstructionCombining.cpp | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.735 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.736 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.735 Sun Apr 8 03:01:49 2007 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Sun Apr 8 20:11:16 2007 @@ -9160,6 +9160,10 @@ Value *ScalarOp = IE.getOperand(1); Value *IdxOp = IE.getOperand(2); + // Inserting an undef or into an undefined place, remove this. + if (isa<UndefValue>(ScalarOp) || isa<UndefValue>(IdxOp)) + ReplaceInstUsesWith(IE, VecOp); + // If the inserted element was extracted from some other vector, and if the // indexes are constant, try to turn this into a shufflevector operation. if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits