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