68 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4declare void @use(i1)5 6; Make sure we do not crash when trying to inject info about vector values from SCEV.7define void @test_vector_iv(i32 %x, i1 %c) {8; CHECK-LABEL: @test_vector_iv(9; CHECK-NEXT: entry:10; CHECK-NEXT: br i1 [[C:%.*]], label [[PRE:%.*]], label [[BB2:%.*]]11; CHECK: pre:12; CHECK-NEXT: [[C_1:%.*]] = icmp ule i32 [[X:%.*]], 1013; CHECK-NEXT: br i1 [[C_1]], label [[LOOP:%.*]], label [[BB2]]14; CHECK: loop:15; CHECK-NEXT: [[IV:%.*]] = phi <4 x i8> [ zeroinitializer, [[PRE]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]16; CHECK-NEXT: call void @use(i1 true)17; CHECK-NEXT: call void @use(i1 false)18; CHECK-NEXT: [[C_2:%.*]] = icmp ule i32 [[X]], 919; CHECK-NEXT: call void @use(i1 [[C_2]])20; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i32 [[X]], 921; CHECK-NEXT: call void @use(i1 [[C_3]])22; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw <4 x i8> [[IV]], splat (i8 1)23; CHECK-NEXT: [[E:%.*]] = extractelement <4 x i8> [[IV_NEXT]], i8 224; CHECK-NEXT: [[EC:%.*]] = icmp eq i8 [[E]], 10025; CHECK-NEXT: br i1 [[EC]], label [[EXIT:%.*]], label [[LOOP]]26; CHECK: exit:27; CHECK-NEXT: call void @use(i1 true)28; CHECK-NEXT: ret void29; CHECK: bb2:30; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i32 [[X]], 1031; CHECK-NEXT: call void @use(i1 [[C_5]])32; CHECK-NEXT: ret void33;34entry:35 br i1 %c, label %pre, label %bb236 37pre:38 %c.1 = icmp ule i32 %x, 1039 br i1 %c.1, label %loop, label %bb240 41loop:42 %iv = phi <4 x i8> [ zeroinitializer, %pre ], [ %iv.next, %loop ]43 %t.1 = icmp ule i32 %x, 1044 call void @use(i1 %t.1)45 %f.1 = icmp ugt i32 %x, 1046 call void @use(i1 %f.1)47 48 %c.2 = icmp ule i32 %x, 949 call void @use(i1 %c.2)50 %c.3 = icmp ugt i32 %x, 951 call void @use(i1 %c.3)52 53 %iv.next = add nuw nsw <4 x i8> %iv, <i8 1, i8 1, i8 1, i8 1>54 %e = extractelement <4 x i8> %iv.next, i8 255 %ec = icmp eq i8 %e, 10056 br i1 %ec, label %exit, label %loop57 58exit:59 %c.4 = icmp ule i32 %x, 1060 call void @use(i1 %c.4)61 ret void62 63bb2:64 %c.5 = icmp ugt i32 %x, 1065 call void @use(i1 %c.5)66 ret void67}68