@@ -293,3 +293,135 @@ exit:
293293 ret void
294294
295295}
296+
297+ define void @slt (i16 %a , i16 %b , i1 %c ) {
298+ ; CHECK-LABEL: 'slt'
299+ ; CHECK-NEXT: Determining loop execution counts for: @slt
300+ ; CHECK-NEXT: Loop %loop: backedge-taken count is (63 + (-1 * %count))
301+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -32704
302+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (63 + (-1 * %count))
303+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
304+ entry:
305+ br i1 %c , label %b1 , label %b2
306+
307+ b1:
308+ %cmp1 = icmp slt i16 %a , 8
309+ br i1 %cmp1 , label %preheader , label %exit
310+
311+ b2:
312+ %cmp2 = icmp slt i16 %b , 8
313+ br i1 %cmp2 , label %preheader , label %exit
314+
315+ preheader:
316+ %count = phi i16 [ %a , %b1 ], [ %b , %b2 ]
317+ br label %loop
318+
319+ loop:
320+ %iv = phi i16 [ %iv.next , %loop ], [ %count , %preheader ]
321+ %iv.next = add i16 %iv , 1
322+ %exitcond = icmp slt i16 %iv.next , 64
323+ br i1 %exitcond , label %loop , label %exit
324+
325+ exit:
326+ ret void
327+
328+ }
329+
330+ define void @ult (i16 %a , i16 %b , i1 %c ) {
331+ ; CHECK-LABEL: 'ult'
332+ ; CHECK-NEXT: Determining loop execution counts for: @ult
333+ ; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)
334+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -2
335+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)
336+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
337+ entry:
338+ br i1 %c , label %b1 , label %b2
339+
340+ b1:
341+ %cmp1 = icmp ult i16 %a , 8
342+ br i1 %cmp1 , label %exit , label %preheader
343+
344+ b2:
345+ %cmp2 = icmp ult i16 %b , 8
346+ br i1 %cmp2 , label %exit , label %preheader
347+
348+ preheader:
349+ %count = phi i16 [ %a , %b1 ], [ %b , %b2 ]
350+ br label %loop
351+
352+ loop:
353+ %iv = phi i16 [ %iv.next , %loop ], [ %count , %preheader ]
354+ %iv.next = add i16 %iv , -1
355+ %exitcond = icmp eq i16 %iv.next , 0
356+ br i1 %exitcond , label %exit , label %loop
357+
358+ exit:
359+ ret void
360+
361+ }
362+
363+ define void @sgt (i16 %a , i16 %b , i1 %c ) {
364+ ; CHECK-LABEL: 'sgt'
365+ ; CHECK-NEXT: Determining loop execution counts for: @sgt
366+ ; CHECK-NEXT: Loop %loop: backedge-taken count is %count
367+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 32767
368+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %count
369+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
370+ entry:
371+ br i1 %c , label %b1 , label %b2
372+
373+ b1:
374+ %cmp1 = icmp sgt i16 %a , 8
375+ br i1 %cmp1 , label %preheader , label %exit
376+
377+ b2:
378+ %cmp2 = icmp sgt i16 %b , 8
379+ br i1 %cmp2 , label %preheader , label %exit
380+
381+ preheader:
382+ %count = phi i16 [ %a , %b1 ], [ %b , %b2 ]
383+ br label %loop
384+
385+ loop:
386+ %iv = phi i16 [ %iv.next , %loop ], [ %count , %preheader ]
387+ %iv.next = add i16 %iv , -1
388+ %exitcond = icmp slt i16 %iv.next , 0
389+ br i1 %exitcond , label %exit , label %loop
390+
391+ exit:
392+ ret void
393+ }
394+
395+
396+ define void @mixed (i16 %a , i16 %b , i1 %c ) {
397+ ; CHECK-LABEL: 'mixed'
398+ ; CHECK-NEXT: Determining loop execution counts for: @mixed
399+ ; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %count) + (64 smax (1 + %count)))
400+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -32704
401+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + (-1 * %count) + (64 smax (1 + %count)))
402+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
403+ entry:
404+ br i1 %c , label %b1 , label %b2
405+
406+ b1:
407+ %cmp1 = icmp slt i16 %a , 8
408+ br i1 %cmp1 , label %preheader , label %exit
409+
410+ b2:
411+ %cmp2 = icmp ult i16 %b , 8
412+ br i1 %cmp2 , label %preheader , label %exit
413+
414+ preheader:
415+ %count = phi i16 [ %a , %b1 ], [ %b , %b2 ]
416+ br label %loop
417+
418+ loop:
419+ %iv = phi i16 [ %iv.next , %loop ], [ %count , %preheader ]
420+ %iv.next = add i16 %iv , 1
421+ %exitcond = icmp slt i16 %iv.next , 64
422+ br i1 %exitcond , label %loop , label %exit
423+
424+ exit:
425+ ret void
426+
427+ }
0 commit comments