[PATCH] D14596: [SROA] Choose more profitable type in findCommonType

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 16 16:20:16 PDT 2016


LGTM

On Wed, Mar 16, 2016 at 3:56 PM, Guozhi Wei <carrot at google.com> wrote:

> Carrot updated this revision to Diff 50887.
> Carrot added a comment.
>
> This updated patch fixed https://llvm.org/bugs/show_bug.cgi?id=26918.
>
> The problem of the reverted patch is when we have following code
>
> ; <label>:2:                                      ; preds = %0
>
>   %3 = load atomic i64, i64* %1 monotonic, align 8
>   br label %8
>
> ; <label>:4:                                      ; preds = %0, %0
>
>   %5 = load atomic i64, i64* %1 acquire, align 8
>   br label %8
>
> ; <label>:6:                                      ; preds = %0
>
>   %7 = load atomic i64, i64* %1 seq_cst, align 8
>   br label %8
>
> ; <label>:8:                                      ; preds = %6, %4, %2
>
>   %.in1097491 = phi i64 [ %3, %2 ], [ %7, %6 ], [ %5, %4 ]
>   %9 = bitcast i64 %.in1097491 to double
>   ret double %9
>
> My patch changed it to
>
> ; <label>:2:                                      ; preds = %0
>
>   %3 = load atomic i64, i64* %1 monotonic, align 8
>   %4 = bitcast i64 %3 to double
>   br label %11
>
> ; <label>:5:                                      ; preds = %0, %0
>
>   %6 = load atomic i64, i64* %1 acquire, align 8
>   %7 = bitcast i64 %6 to double
>   br label %11
>
> ; <label>:8:                                      ; preds = %0
>
>   %9 = load atomic i64, i64* %1 seq_cst, align 8
>   %10 = bitcast i64 %9 to double
>   br label %11
>
> ; <label>:11:                                     ; preds = %8, %5, %2
>
>   %12 = phi double [ %4, %2 ], [ %10, %8 ], [ %7, %5 ]
>   %.in1097491 = phi i64 [ %3, %2 ], [ %9, %8 ], [ %6, %5 ]
>   ret double %12
>
> And expects ld/st combining can combine the load instructions with
> following bitcast. But ld/st combining doesn't change volatile/atomic
> memory access, so the bitcast instructions are left there. Later phi
> combining transformed it back to the original form, so the two combining
> transforms the code back and forth indefinitely.
>
> There are two changes compared to the original approved patch:
>
>   1 avoid changing volatile/atomic memory access
>   2 add the impacted instructions to combining worklist
>
> Please take another look.
>
>
> http://reviews.llvm.org/D14596
>
> Files:
>   lib/Transforms/InstCombine/InstCombineCasts.cpp
>   lib/Transforms/InstCombine/InstCombineInternal.h
>   test/Transforms/InstCombine/pr25342.ll
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160316/d7e3500f/attachment-0001.html>


More information about the llvm-commits mailing list