brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.5 KiB · 6bb8e91 Raw
209 lines · plain
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s2; CHECK-LABEL: LBB0{{.*}}if.end3; CHECK: r[[REG:[0-9]+]] = zxth4; CHECK: lsr(r[[REG]],5 6target triple = "hexagon"7 8@g0 = external constant [146 x i16], align 89@g1 = external constant [0 x i16], align 210 11define void @fred(ptr nocapture readonly %p0, i16 signext %p1, ptr nocapture %p2, i16 signext %p3, i16 signext %p4, i16 signext %p5) #0 {12entry:13  %conv = sext i16 %p1 to i3214  %0 = tail call i32 @llvm.hexagon.S2.asl.r.r.sat(i32 %conv, i32 1)15  %1 = tail call i32 @llvm.hexagon.A2.sath(i32 %0)16  %2 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 3, i32 %1)17  %conv3 = sext i16 %p4 to i3218  %cmp144 = icmp sgt i16 %p4, 019  br i1 %cmp144, label %for.body, label %for.end20 21for.body:                                         ; preds = %entry, %for.body22  %arrayidx.phi = phi ptr [ %arrayidx.inc, %for.body ], [ %p0, %entry ]23  %i.0146.apmt = phi i32 [ %inc.apmt, %for.body ], [ 0, %entry ]24  %L_temp1.0145 = phi i32 [ %5, %for.body ], [ 1, %entry ]25  %3 = load i32, ptr %arrayidx.phi, align 4, !tbaa !126  %4 = tail call i32 @llvm.hexagon.A2.abssat(i32 %3)27  %5 = tail call i32 @llvm.hexagon.A2.max(i32 %L_temp1.0145, i32 %4)28  %inc.apmt = add nuw nsw i32 %i.0146.apmt, 129  %exitcond151 = icmp eq i32 %inc.apmt, %conv330  %arrayidx.inc = getelementptr i32, ptr %arrayidx.phi, i32 131  br i1 %exitcond151, label %for.end, label %for.body, !llvm.loop !532 33for.end:                                          ; preds = %for.body, %entry34  %L_temp1.0.lcssa = phi i32 [ 1, %entry ], [ %5, %for.body ]35  %6 = tail call i32 @llvm.hexagon.S2.clbnorm(i32 %L_temp1.0.lcssa)36  %arrayidx6 = getelementptr inbounds [146 x i16], ptr @g0, i32 0, i32 %conv337  %7 = load i16, ptr %arrayidx6, align 2, !tbaa !738  %conv7 = sext i16 %7 to i3239  %8 = tail call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 %6, i32 %conv7)40  br i1 %cmp144, label %for.body14.lr.ph, label %for.end2941 42for.body14.lr.ph:                                 ; preds = %for.end43  %sext132 = shl i32 %8, 1644  %conv17 = ashr exact i32 %sext132, 1645  br label %for.body1446 47for.body14:                                       ; preds = %for.body14, %for.body14.lr.ph48  %arrayidx16.phi = phi ptr [ %p0, %for.body14.lr.ph ], [ %arrayidx16.inc, %for.body14 ]49  %i.1143.apmt = phi i32 [ 0, %for.body14.lr.ph ], [ %inc28.apmt, %for.body14 ]50  %L_temp.0142 = phi i32 [ 0, %for.body14.lr.ph ], [ %12, %for.body14 ]51  %9 = load i32, ptr %arrayidx16.phi, align 4, !tbaa !152  %10 = tail call i32 @llvm.hexagon.S2.asl.r.r.sat(i32 %9, i32 %conv17)53  %11 = tail call i32 @llvm.hexagon.A2.asrh(i32 %10)54  %sext133 = shl i32 %11, 1655  %conv23 = ashr exact i32 %sext133, 1656  %12 = tail call i32 @llvm.hexagon.M2.mpy.acc.sat.ll.s0(i32 %L_temp.0142, i32 %conv23, i32 %conv23)57  %inc28.apmt = add nuw nsw i32 %i.1143.apmt, 158  %exitcond = icmp eq i32 %inc28.apmt, %conv359  %arrayidx16.inc = getelementptr i32, ptr %arrayidx16.phi, i32 160  br i1 %exitcond, label %for.end29, label %for.body1461 62for.end29:                                        ; preds = %for.body14, %for.end63  %L_temp.0.lcssa = phi i32 [ 0, %for.end ], [ %12, %for.body14 ]64  %13 = tail call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 %conv3, i32 1)65  %cmp31 = icmp sgt i32 %13, 066  br i1 %cmp31, label %if.then, label %if.end67 68if.then:                                          ; preds = %for.end2969  %arrayidx34 = getelementptr inbounds [0 x i16], ptr @g1, i32 0, i32 %conv370  %14 = load i16, ptr %arrayidx34, align 2, !tbaa !771  %cmp.i = icmp eq i32 %L_temp.0.lcssa, -214748364872  %cmp1.i = icmp eq i16 %14, -3276873  %or.cond.i = and i1 %cmp.i, %cmp1.i74  br i1 %or.cond.i, label %if.end, label %if.else.i75 76if.else.i:                                        ; preds = %if.then77  %conv3.i = sext i16 %14 to i3278  %15 = tail call i32 @llvm.hexagon.M2.hmmpyl.s1(i32 %L_temp.0.lcssa, i32 %conv3.i) #279  %16 = tail call i64 @llvm.hexagon.M2.mpyd.ll.s1(i32 %conv3.i, i32 %L_temp.0.lcssa) #280  %conv5.i = trunc i64 %16 to i3281  %phitmp = and i32 %conv5.i, 6553582  br label %if.end83 84if.end:                                           ; preds = %if.else.i, %if.then, %for.end2985  %L_temp.2 = phi i32 [ %L_temp.0.lcssa, %for.end29 ], [ %15, %if.else.i ], [ 2147483647, %if.then ]86  %lsb.0 = phi i32 [ 0, %for.end29 ], [ %phitmp, %if.else.i ], [ 65535, %if.then ]87  %sext = shl i32 %8, 1688  %conv35 = ashr exact i32 %sext, 1689  %17 = tail call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 %conv35, i32 16)90  %18 = tail call i32 @llvm.hexagon.S2.asl.r.r.sat(i32 %17, i32 1)91  %19 = tail call i32 @llvm.hexagon.A2.sath(i32 %18)92  %20 = tail call i32 @llvm.hexagon.S2.clbnorm(i32 %L_temp.2)93  %sext123 = shl i32 %20, 1694  %conv38 = ashr exact i32 %sext123, 1695  %sext124 = shl i32 %19, 1696  %conv39 = ashr exact i32 %sext124, 1697  %21 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv38, i32 %conv39)98  %22 = tail call i32 @llvm.hexagon.S2.asl.r.r.sat(i32 %L_temp.2, i32 %conv38)99  %23 = tail call i32 @llvm.hexagon.A2.zxth(i32 %lsb.0)100  %24 = tail call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 16, i32 %conv38)101  %25 = tail call i32 @llvm.hexagon.S2.lsr.r.r(i32 %23, i32 %24)102  %sext125 = shl i32 %25, 16103  %conv45 = ashr exact i32 %sext125, 16104  %26 = tail call i32 @llvm.hexagon.A2.addsat(i32 %22, i32 %conv45)105  %sext126 = shl i32 %2, 16106  %conv46 = ashr exact i32 %sext126, 16107  %sext127 = shl i32 %21, 16108  %conv47 = ashr exact i32 %sext127, 16109  %27 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv46, i32 %conv47)110  %sext128 = shl i32 %27, 16111  %conv49 = ashr exact i32 %sext128, 16112  %cmp50 = icmp sgt i32 %sext128, 327679113  %tobool = icmp eq i16 %p5, 0114  %or.cond = or i1 %tobool, %cmp50115  br i1 %or.cond, label %if.else68, label %if.then53116 117if.then53:                                        ; preds = %if.end118  %28 = tail call i32 @llvm.hexagon.S2.asl.r.r.sat(i32 %conv49, i32 1)119  %29 = tail call i32 @llvm.hexagon.A2.sath(i32 %28)120  %30 = tail call i32 @llvm.hexagon.A2.subsat(i32 %26, i32 1276901417)121  %cmp56 = icmp slt i32 %30, 0122  br i1 %cmp56, label %if.then58, label %if.else123 124if.then58:                                        ; preds = %if.then53125  %sext131 = shl i32 %29, 16126  %conv59 = ashr exact i32 %sext131, 16127  %31 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv59, i32 2)128  br label %if.end80129 130if.else:                                          ; preds = %if.then53131  %32 = tail call i32 @llvm.hexagon.A2.subsat(i32 %26, i32 1805811301)132  %cmp61 = icmp slt i32 %32, 0133  br i1 %cmp61, label %if.then63, label %if.end80134 135if.then63:                                        ; preds = %if.else136  %sext130 = shl i32 %29, 16137  %conv64 = ashr exact i32 %sext130, 16138  %33 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv64, i32 1)139  br label %if.end80140 141if.else68:                                        ; preds = %if.end142  %34 = tail call i32 @llvm.hexagon.A2.subsat(i32 %26, i32 1518500250)143  %cmp69 = icmp slt i32 %34, 0144  br i1 %cmp69, label %if.then71, label %if.end74145 146if.then71:                                        ; preds = %if.else68147  %35 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv49, i32 1)148  br label %if.end74149 150if.end74:                                         ; preds = %if.then71, %if.else68151  %m.0.in = phi i32 [ %35, %if.then71 ], [ %27, %if.else68 ]152  br i1 %tobool, label %if.end80, label %if.then76153 154if.then76:                                        ; preds = %if.end74155  %sext129 = shl i32 %m.0.in, 16156  %conv77 = ashr exact i32 %sext129, 16157  %36 = tail call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %conv77, i32 5)158  br label %if.end80159 160if.end80:                                         ; preds = %if.end74, %if.then76, %if.then58, %if.then63, %if.else161  %m.1.in = phi i32 [ %31, %if.then58 ], [ %33, %if.then63 ], [ %29, %if.else ], [ %36, %if.then76 ], [ %m.0.in, %if.end74 ]162  %m.1 = trunc i32 %m.1.in to i16163  %cmp.i135 = icmp slt i16 %m.1, 0164  %var_out.0.i136 = select i1 %cmp.i135, i16 0, i16 %m.1165  %conv81 = sext i16 %p3 to i32166  %37 = tail call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 %conv81, i32 1)167  %conv82 = trunc i32 %37 to i16168  %cmp.i134 = icmp sgt i16 %var_out.0.i136, %conv82169  %var_out.0.i = select i1 %cmp.i134, i16 %conv82, i16 %var_out.0.i136170  store i16 %var_out.0.i, ptr %p2, align 2, !tbaa !7171  ret void172}173 174declare i32 @llvm.hexagon.A2.abssat(i32) #2175declare i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32, i32) #2176declare i32 @llvm.hexagon.A2.addsat(i32, i32) #2177declare i32 @llvm.hexagon.A2.asrh(i32) #2178declare i32 @llvm.hexagon.A2.max(i32, i32) #2179declare i32 @llvm.hexagon.A2.sath(i32) #2180declare i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32, i32) #2181declare i32 @llvm.hexagon.A2.subsat(i32, i32) #2182declare i32 @llvm.hexagon.A2.zxth(i32) #2183declare i32 @llvm.hexagon.M2.hmmpyl.s1(i32, i32) #2184declare i32 @llvm.hexagon.M2.mpy.acc.sat.ll.s0(i32, i32, i32) #2185declare i32 @llvm.hexagon.S2.asl.r.r.sat(i32, i32) #2186declare i32 @llvm.hexagon.S2.asr.r.r.sat(i32, i32) #2187declare i32 @llvm.hexagon.S2.clbnorm(i32) #2188declare i32 @llvm.hexagon.S2.lsr.r.r(i32, i32) #2189declare i64 @llvm.hexagon.M2.mpyd.ll.s1(i32, i32) #2190declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1191declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1192 193attributes #0 = { norecurse nounwind "target-cpu"="hexagonv60" "target-features"="+hvx,,+hvx-length64b" "unsafe-fp-math"="false" "use-soft-float"="false" }194attributes #1 = { argmemonly nounwind }195attributes #2 = { nounwind readnone }196 197 198!1 = !{!2, !2, i64 0}199!2 = !{!"int", !3, i64 0}200!3 = !{!"omnipotent char", !4, i64 0}201!4 = !{!"Simple C/C++ TBAA"}202!5 = distinct !{!5, !6}203!6 = !{!"llvm.loop.threadify", i32 81508608}204!7 = !{!8, !8, i64 0}205!8 = !{!"short", !3, i64 0}206!9 = distinct !{!9, !10}207!10 = !{!"llvm.loop.threadify", i32 1441813}208!11 = distinct !{!11, !10}209