brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 9a4a9e8 Raw
98 lines · plain
1; RUN: opt -S -passes='loop-versioning-licm' -licm-versioning-invariant-threshold=0 %s | FileCheck %s2 3; Make sure the convergent attribute is respected, and no condition is4; introduced5 6; CHECK-LABEL: @test_convergent(7; CHECK: call void @llvm.convergent()8; CHECK-NOT: call void @llvm.convergent()9define i32 @test_convergent(ptr nocapture %var1, ptr nocapture readnone %var2, ptr nocapture %var3, i32 %itr) #1 {10entry:11  %cmp14 = icmp eq i32 %itr, 012  br i1 %cmp14, label %for.end13, label %for.cond1.preheader13 14for.cond1.preheader:                              ; preds = %entry, %for.inc1115  %j.016 = phi i32 [ %j.1.lcssa, %for.inc11 ], [ 0, %entry ]16  %i.015 = phi i32 [ %inc12, %for.inc11 ], [ 0, %entry ]17  %cmp212 = icmp ult i32 %j.016, %itr18  br i1 %cmp212, label %for.body3.lr.ph, label %for.inc1119 20for.body3.lr.ph:                                  ; preds = %for.cond1.preheader21  %add = add i32 %i.015, %itr22  %idxprom6 = zext i32 %i.015 to i6423  %arrayidx7 = getelementptr inbounds i32, ptr %var3, i64 %idxprom624  br label %for.body325 26for.body3:                                        ; preds = %for.body3, %for.body3.lr.ph27  %j.113 = phi i32 [ %j.016, %for.body3.lr.ph ], [ %inc, %for.body3 ]28  %idxprom = zext i32 %j.113 to i6429  %arrayidx = getelementptr inbounds i32, ptr %var1, i64 %idxprom30  store i32 %add, ptr %arrayidx, align 431  %load.arrayidx7 = load i32, ptr %arrayidx7, align 432  call void @llvm.convergent()33  %add8 = add nsw i32 %load.arrayidx7, %add34  store i32 %add8, ptr %arrayidx7, align 435  %inc = add nuw i32 %j.113, 136  %cmp2 = icmp ult i32 %inc, %itr37  br i1 %cmp2, label %for.body3, label %for.inc1138 39for.inc11:                                        ; preds = %for.body3, %for.cond1.preheader40  %j.1.lcssa = phi i32 [ %j.016, %for.cond1.preheader ], [ %itr, %for.body3 ]41  %inc12 = add nuw i32 %i.015, 142  %cmp = icmp ult i32 %inc12, %itr43  br i1 %cmp, label %for.cond1.preheader, label %for.end1344 45for.end13:                                        ; preds = %for.inc11, %entry46  ret i32 047}48 49; CHECK-LABEL: @test_noduplicate(50; CHECK: call void @llvm.noduplicate()51; CHECK-NOT: call void @llvm.noduplicate()52define i32 @test_noduplicate(ptr nocapture %var1, ptr nocapture readnone %var2, ptr nocapture %var3, i32 %itr) #2 {53entry:54  %cmp14 = icmp eq i32 %itr, 055  br i1 %cmp14, label %for.end13, label %for.cond1.preheader56 57for.cond1.preheader:                              ; preds = %entry, %for.inc1158  %j.016 = phi i32 [ %j.1.lcssa, %for.inc11 ], [ 0, %entry ]59  %i.015 = phi i32 [ %inc12, %for.inc11 ], [ 0, %entry ]60  %cmp212 = icmp ult i32 %j.016, %itr61  br i1 %cmp212, label %for.body3.lr.ph, label %for.inc1162 63for.body3.lr.ph:                                  ; preds = %for.cond1.preheader64  %add = add i32 %i.015, %itr65  %idxprom6 = zext i32 %i.015 to i6466  %arrayidx7 = getelementptr inbounds i32, ptr %var3, i64 %idxprom667  br label %for.body368 69for.body3:                                        ; preds = %for.body3, %for.body3.lr.ph70  %j.113 = phi i32 [ %j.016, %for.body3.lr.ph ], [ %inc, %for.body3 ]71  %idxprom = zext i32 %j.113 to i6472  %arrayidx = getelementptr inbounds i32, ptr %var1, i64 %idxprom73  store i32 %add, ptr %arrayidx, align 474  %load.arrayidx7 = load i32, ptr %arrayidx7, align 475  call void @llvm.noduplicate()76  %add8 = add nsw i32 %load.arrayidx7, %add77  store i32 %add8, ptr %arrayidx7, align 478  %inc = add nuw i32 %j.113, 179  %cmp2 = icmp ult i32 %inc, %itr80  br i1 %cmp2, label %for.body3, label %for.inc1181 82for.inc11:                                        ; preds = %for.body3, %for.cond1.preheader83  %j.1.lcssa = phi i32 [ %j.016, %for.cond1.preheader ], [ %itr, %for.body3 ]84  %inc12 = add nuw i32 %i.015, 185  %cmp = icmp ult i32 %inc12, %itr86  br i1 %cmp, label %for.cond1.preheader, label %for.end1387 88for.end13:                                        ; preds = %for.inc11, %entry89  ret i32 090}91 92declare void @llvm.convergent() #193declare void @llvm.noduplicate() #294 95attributes #0 = { norecurse nounwind }96attributes #1 = { norecurse nounwind readnone convergent }97attributes #2 = { norecurse nounwind readnone noduplicate }98