xref: /llvm-project/llvm/test/Transforms/ConstraintElimination/geps-ptrvector.ll (revision 56c091ea7106507b36015297ee9005c9d5fab0bf)
144bb4099SBjorn Pettersson; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
244bb4099SBjorn Pettersson; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
344bb4099SBjorn Pettersson
444bb4099SBjorn Pettersson; Should not crash when GEP pointer operand is a vector.
544bb4099SBjorn Petterssondefine <2 x i1> @test.vectorgep(<2 x ptr> %vec) {
644bb4099SBjorn Pettersson; CHECK-LABEL: @test.vectorgep(
744bb4099SBjorn Pettersson; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i32, <2 x ptr> [[VEC:%.*]], i64 0
844bb4099SBjorn Pettersson; CHECK-NEXT:    [[COND:%.*]] = icmp ule <2 x ptr> [[GEP]], zeroinitializer
944bb4099SBjorn Pettersson; CHECK-NEXT:    ret <2 x i1> [[COND]]
1044bb4099SBjorn Pettersson;
1144bb4099SBjorn Pettersson  %gep = getelementptr inbounds i32, <2 x ptr> %vec, i64 0
1244bb4099SBjorn Pettersson  %cond = icmp ule <2 x ptr> %gep, zeroinitializer
1344bb4099SBjorn Pettersson  ret <2 x i1> %cond
1444bb4099SBjorn Pettersson}
15b478d8b9SFlorian Hahn
16b478d8b9SFlorian Hahndefine <2 x i1> @test.vectorgep.ult.true(<2 x ptr> %vec) {
17b478d8b9SFlorian Hahn; CHECK-LABEL: @test.vectorgep.ult.true(
18b478d8b9SFlorian Hahn; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, <2 x ptr> [[VEC:%.*]], i64 1
1938fffa63SPaul Walker; CHECK-NEXT:    ret <2 x i1> splat (i1 true)
20b478d8b9SFlorian Hahn;
21b478d8b9SFlorian Hahn  %gep.1 = getelementptr inbounds i32, <2 x ptr> %vec, i64 1
22b478d8b9SFlorian Hahn  %t.1 = icmp ult <2 x ptr> %vec, %gep.1
23b478d8b9SFlorian Hahn  ret <2 x i1> %t.1
24b478d8b9SFlorian Hahn}
25b478d8b9SFlorian Hahn
26b478d8b9SFlorian Hahndefine <2 x i1> @test.vectorgep.ult.false(<2 x ptr> %vec) {
27b478d8b9SFlorian Hahn; CHECK-LABEL: @test.vectorgep.ult.false(
28b478d8b9SFlorian Hahn; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, <2 x ptr> [[VEC:%.*]], i64 1
29b478d8b9SFlorian Hahn; CHECK-NEXT:    ret <2 x i1> zeroinitializer
30b478d8b9SFlorian Hahn;
31b478d8b9SFlorian Hahn  %gep.1 = getelementptr inbounds i32, <2 x ptr> %vec, i64 1
32b478d8b9SFlorian Hahn  %t.1 = icmp ult <2 x ptr> %gep.1, %vec
33b478d8b9SFlorian Hahn  ret <2 x i1> %t.1
34b478d8b9SFlorian Hahn}
3574d8628cSFlorian Hahn
3674d8628cSFlorian Hahn
3774d8628cSFlorian Hahndefine <vscale x 2 x i1> @test.scalable.vectorgep.ult.true(<vscale x 2 x ptr> %vec) {
3874d8628cSFlorian Hahn; CHECK-LABEL: @test.scalable.vectorgep.ult.true(
3974d8628cSFlorian Hahn; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, <vscale x 2 x ptr> [[VEC:%.*]], i64 1
40*56c091eaSPaul Walker; CHECK-NEXT:    ret <vscale x 2 x i1> splat (i1 true)
4174d8628cSFlorian Hahn;
4274d8628cSFlorian Hahn  %gep.1 = getelementptr inbounds i32, <vscale x 2 x ptr> %vec, i64 1
4374d8628cSFlorian Hahn  %t.1 = icmp ult <vscale x 2 x ptr> %vec, %gep.1
4474d8628cSFlorian Hahn  ret <vscale x 2 x i1> %t.1
4574d8628cSFlorian Hahn}
4674d8628cSFlorian Hahn
4774d8628cSFlorian Hahndefine <vscale x 2 x i1> @test.scalable.vectorgep.ult.false(<vscale x 2 x ptr> %vec) {
4874d8628cSFlorian Hahn; CHECK-LABEL: @test.scalable.vectorgep.ult.false(
4974d8628cSFlorian Hahn; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, <vscale x 2 x ptr> [[VEC:%.*]], i64 1
508086b0c8SFlorian Hahn; CHECK-NEXT:    ret <vscale x 2 x i1> zeroinitializer
5174d8628cSFlorian Hahn;
5274d8628cSFlorian Hahn  %gep.1 = getelementptr inbounds i32, <vscale x 2 x ptr> %vec, i64 1
5374d8628cSFlorian Hahn  %t.1 = icmp ult <vscale x 2 x ptr> %gep.1, %vec
5474d8628cSFlorian Hahn  ret <vscale x 2 x i1> %t.1
5574d8628cSFlorian Hahn}
56