[llvm] cbd7eab - Revert "[ConstantFold] Handle vectors in ConstantFoldLoadThroughBitcast()"

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 17 10:36:18 PDT 2021


JFYI, this appears to be a transient problem on the bug tracker. I had 
checked the link yesterday - because I was curious about the existence 
of an IR trest case - and it worked at the time.  Now it doesn't.

Zequan, I would encourage you to share the IR reproducer by email in 
this thread though.  Both in this specific case, and in general when 
reverting because of chromium build failures.

Philip

On 3/17/21 10:02 AM, Roman Lebedev via llvm-commits wrote:
> On Wed, Mar 17, 2021 at 8:00 PM Zequan Wu <zequanwu at google.com> wrote:
>> I provided a IR reproducer in https://bugs.chromium.org/p/chromium/issues/detail?id=1188885
> ... which, as i have already stated, doesn't load for me.
>
>> On Wed, Mar 17, 2021 at 12:21 AM Roman Lebedev <lebedev.ri at gmail.com> wrote:
>>> Please either provide a reproducer (bug says "Permission denied.") or
>>> revert the revert.
>>>
>>> On Wed, Mar 17, 2021 at 12:37 AM Zequan Wu via llvm-commits
>>> <llvm-commits at lists.llvm.org> wrote:
>>>>
>>>> Author: Zequan Wu
>>>> Date: 2021-03-16T14:36:21-07:00
>>>> New Revision: cbd7eabea88ea5cb9d6e6c6f43bd2165c8becb36
>>>>
>>>> URL: https://github.com/llvm/llvm-project/commit/cbd7eabea88ea5cb9d6e6c6f43bd2165c8becb36
>>>> DIFF: https://github.com/llvm/llvm-project/commit/cbd7eabea88ea5cb9d6e6c6f43bd2165c8becb36.diff
>>>>
>>>> LOG: Revert "[ConstantFold] Handle vectors in ConstantFoldLoadThroughBitcast()"
>>>>
>>>> That commit caused chromium build to crash: https://bugs.chromium.org/p/chromium/issues/detail?id=1188885
>>>>
>>>> This reverts commit edf7004851519464f86b0f641da4d6c9506decb1.
>>>>
>>>> Added:
>>>>
>>>>
>>>> Modified:
>>>>      llvm/lib/Analysis/ConstantFolding.cpp
>>>>      llvm/test/Transforms/GVN/non-integral-pointers-inseltpoison.ll
>>>>      llvm/test/Transforms/GVN/non-integral-pointers.ll
>>>>
>>>> Removed:
>>>>
>>>>
>>>>
>>>> ################################################################################
>>>> diff  --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
>>>> index 4d7237becbe6..2e2d1e3a4cf2 100644
>>>> --- a/llvm/lib/Analysis/ConstantFolding.cpp
>>>> +++ b/llvm/lib/Analysis/ConstantFolding.cpp
>>>> @@ -387,6 +387,11 @@ Constant *llvm::ConstantFoldLoadThroughBitcast(Constant *C, Type *DestTy,
>>>>           return ConstantExpr::getCast(Cast, C, DestTy);
>>>>       }
>>>>
>>>> +    // If this isn't an aggregate type, there is nothing we can do to drill down
>>>> +    // and find a bitcastable constant.
>>>> +    if (!SrcTy->isAggregateType())
>>>> +      return nullptr;
>>>> +
>>>>       // We're simulating a load through a pointer that was bitcast to point to
>>>>       // a
>>>> diff erent type, so we can try to walk down through the initial
>>>>       // elements of an aggregate to see if some part of the aggregate is
>>>>
>>>> diff  --git a/llvm/test/Transforms/GVN/non-integral-pointers-inseltpoison.ll b/llvm/test/Transforms/GVN/non-integral-pointers-inseltpoison.ll
>>>> index d26003b2c8f2..2aef7620841b 100644
>>>> --- a/llvm/test/Transforms/GVN/non-integral-pointers-inseltpoison.ll
>>>> +++ b/llvm/test/Transforms/GVN/non-integral-pointers-inseltpoison.ll
>>>> @@ -213,12 +213,14 @@ entry:
>>>>     ret i64 addrspace(4)* %ref
>>>>   }
>>>>
>>>> +; TODO: missed optimization
>>>>   define i8 addrspace(4)* @forward_memcopy(i8 addrspace(4)* addrspace(4)* %loc) {
>>>>   ; CHECK-LABEL: @forward_memcopy(
>>>>   ; CHECK-NEXT:  entry:
>>>>   ; CHECK-NEXT:    [[LOC_BC:%.*]] = bitcast i8 addrspace(4)* addrspace(4)* [[LOC:%.*]] to i8 addrspace(4)*
>>>>   ; CHECK-NEXT:    call void @llvm.memcpy.p4i8.p0i8.i64(i8 addrspace(4)* align 4 [[LOC_BC]], i8* bitcast (<4 x i64 addrspace(4)*>* @NonZeroConstant2 to i8*), i64 8, i1 false)
>>>> -; CHECK-NEXT:    ret i8 addrspace(4)* bitcast (i64 addrspace(4)* getelementptr (i64, i64 addrspace(4)* null, i32 3) to i8 addrspace(4)*)
>>>> +; CHECK-NEXT:    [[REF:%.*]] = load i8 addrspace(4)*, i8 addrspace(4)* addrspace(4)* [[LOC]], align 8
>>>> +; CHECK-NEXT:    ret i8 addrspace(4)* [[REF]]
>>>>   ;
>>>>   entry:
>>>>     %loc.bc = bitcast i8 addrspace(4)* addrspace(4)* %loc to i8 addrspace(4)*
>>>>
>>>> diff  --git a/llvm/test/Transforms/GVN/non-integral-pointers.ll b/llvm/test/Transforms/GVN/non-integral-pointers.ll
>>>> index 07d941fdb619..6b9a9171f5f3 100644
>>>> --- a/llvm/test/Transforms/GVN/non-integral-pointers.ll
>>>> +++ b/llvm/test/Transforms/GVN/non-integral-pointers.ll
>>>> @@ -213,12 +213,14 @@ entry:
>>>>     ret i64 addrspace(4)* %ref
>>>>   }
>>>>
>>>> +; TODO: missed optimization
>>>>   define i8 addrspace(4)* @forward_memcopy(i8 addrspace(4)* addrspace(4)* %loc) {
>>>>   ; CHECK-LABEL: @forward_memcopy(
>>>>   ; CHECK-NEXT:  entry:
>>>>   ; CHECK-NEXT:    [[LOC_BC:%.*]] = bitcast i8 addrspace(4)* addrspace(4)* [[LOC:%.*]] to i8 addrspace(4)*
>>>>   ; CHECK-NEXT:    call void @llvm.memcpy.p4i8.p0i8.i64(i8 addrspace(4)* align 4 [[LOC_BC]], i8* bitcast (<4 x i64 addrspace(4)*>* @NonZeroConstant2 to i8*), i64 8, i1 false)
>>>> -; CHECK-NEXT:    ret i8 addrspace(4)* bitcast (i64 addrspace(4)* getelementptr (i64, i64 addrspace(4)* null, i32 3) to i8 addrspace(4)*)
>>>> +; CHECK-NEXT:    [[REF:%.*]] = load i8 addrspace(4)*, i8 addrspace(4)* addrspace(4)* [[LOC]], align 8
>>>> +; CHECK-NEXT:    ret i8 addrspace(4)* [[REF]]
>>>>   ;
>>>>   entry:
>>>>     %loc.bc = bitcast i8 addrspace(4)* addrspace(4)* %loc to i8 addrspace(4)*
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list