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

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 17 10:02:17 PDT 2021


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


More information about the llvm-commits mailing list