[InstCombine][SVE] Fix visitGetElementPtrInst for scalable type.
authorHuihui Zhang <huihuiz@quicinc.com>
Tue, 14 Apr 2020 19:38:03 +0000 (12:38 -0700)
committerHuihui Zhang <huihuiz@quicinc.com>
Tue, 14 Apr 2020 19:38:32 +0000 (12:38 -0700)
commit5c1d1a62e3754e5f3aa3f5e5e03d13acd9f973e4
treef33318ddf6e5116dd3f91967a72ed9e892869eca
parentcea112f422cea3e6fab7cefffef2e09eadec279e
[InstCombine][SVE] Fix visitGetElementPtrInst for scalable type.

Summary:
This patch fix the following issues in InstCombiner::visitGetElementPtrInst

    1. Skip for scalable type if transformation requires fixed size number of
    vector element.
    2. Skip for scalable type if transformation relies on compile-time known type
    alloc size.
    3. Use VectorType::getElementCount when scalable property is used to construct
    new VectorType.
    4. Use TypeSize::getKnownMinSize when minimal size of a scalable type is valid to determine GEP 'inbounds'.
    5. Explicitly call TypeSize::getFixedSize to avoid implicit type conversion to uint64_t.

Reviewers: sdesmalen, efriedma, spatel, ctetreau

Reviewed By: efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D78081
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/test/Transforms/InstCombine/vscale_gep.ll [new file with mode: 0644]