Lines Matching refs:overflow
4 declare { i8, i1 } @llvm.uadd.with.overflow.i8(i8, i8) nounwind readnone
5 declare { i8, i1 } @llvm.sadd.with.overflow.i8(i8, i8) nounwind readnone
6 declare { i8, i1 } @llvm.usub.with.overflow.i8(i8, i8) nounwind readnone
7 declare { i8, i1 } @llvm.ssub.with.overflow.i8(i8, i8) nounwind readnone
8 declare { i8, i1 } @llvm.umul.with.overflow.i8(i8, i8) nounwind readnone
9 declare { i8, i1 } @llvm.smul.with.overflow.i8(i8, i8) nounwind readnone
10 declare { i32, i1 } @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone
11 declare { i32, i1 } @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone
12 declare { i32, i1 } @llvm.ssub.with.overflow.i32(i32, i32) nounwind readnone
13 declare { i32, i1 } @llvm.usub.with.overflow.i32(i32, i32) nounwind readnone
14 declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone
15 declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone
22 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %A, i8 %B)
37 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %and.A, i8 %and.B)
54 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %or.A, i8 %or.B)
66 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 undef, i8 %A)
78 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 0, i8 %A)
90 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %A, i8 -4)
100 %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %A, i8 %B)
116 %x = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %aa, i32 %bb)
130 %x = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %aa, i32 %bb)
144 %x = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %aa, i32 %bb)
158 %x = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %aa, i32 %bb)
172 %x = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %aa, i32 %bb)
186 %x = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %aa, i32 %bb)
194 ; CHECK-NEXT: [[X:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[AA]], i32 [[BB]])
199 %x = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %aa, i32 %bb)
213 %x = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %aa, i32 %bb)
222 %x = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 0, i8 %A)
234 %x = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 1, i8 %A)
248 %mul = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %shr, i32 3)
258 ; CHECK-NEXT: [[MUL:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 [[SHR]], i32 4)
265 %mul = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %shr, i32 4)
282 %mul = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %or_x, i32 %or_y)
291 %t = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %div, i32 1)
303 %t = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %div, i32 1)
313 %t = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %rem, i32 %rem)
321 ; CHECK-NEXT: [[T:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[REM]], i32 [[REM]])
326 ; This may overflow because the result of the mul operands may be greater than 16bits
328 %t = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %rem, i32 %rem)
339 %t = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %rem, i32 %rem)
352 %x = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 0, i32 %aa)
361 %x = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %a, i32 0)
367 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y:%…
373 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
383 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y:%…
389 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
400 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X]], i32 [[Y:%.*]])
407 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
418 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y]])
425 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
435 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 42)
441 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 42)
451 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 1)
457 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 1)
467 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 -1)
473 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 -1)
483 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[X:%.*]], i32 42)
486 %a = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 42, i32 %x)
492 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 42)
495 %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 42, i32 %x)
501 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 42, i32 [[X:%.*]])
504 %a = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 42, i32 %x)
510 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 42, i32 [[X:%.*]])
513 %a = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 42, i32 %x)
519 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[X:%.*]], i32 42)
522 %a = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 42, i32 %x)
528 ; CHECK-NEXT: [[A:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 [[X:%.*]], i32 42)
531 %a = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 42, i32 %x)
535 ; Always overflow tests
544 %a = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %y, i8 64)
556 %a = call { i8, i1 } @llvm.usub.with.overflow.i8(i8 63, i8 %y)
567 %a = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %y, i8 2)
580 %a = call { i8, i1 } @llvm.sadd.with.overflow.i8(i8 %y, i8 28)
593 %a = call { i8, i1 } @llvm.ssub.with.overflow.i8(i8 -100, i8 %y)
600 ; CHECK-NEXT: [[A:%.*]] = call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[TMP1]], i8 2)
605 %a = call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %y, i8 2)
609 declare { <4 x i8>, <4 x i1> } @llvm.sadd.with.overflow.v4i8(<4 x i8>, <4 x i8>)
610 declare { <4 x i8>, <4 x i1> } @llvm.uadd.with.overflow.v4i8(<4 x i8>, <4 x i8>)
611 declare { <4 x i8>, <4 x i1> } @llvm.ssub.with.overflow.v4i8(<4 x i8>, <4 x i8>)
612 declare { <4 x i8>, <4 x i1> } @llvm.usub.with.overflow.v4i8(<4 x i8>, <4 x i8>)
613 declare { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8>, <4 x i8>)
614 declare { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8>, <4 x i8>)
616 ; Always overflow
622 …%x = call { <4 x i8>, <4 x i1> } @llvm.sadd.with.overflow.v4i8(<4 x i8> <i8 127, i8 127, i8 127, i…
630 …%x = call { <4 x i8>, <4 x i1> } @llvm.uadd.with.overflow.v4i8(<4 x i8> <i8 255, i8 255, i8 255, i…
638 …%x = call { <4 x i8>, <4 x i1> } @llvm.ssub.with.overflow.v4i8(<4 x i8> <i8 -128, i8 -128, i8 -128…
646 …%x = call { <4 x i8>, <4 x i1> } @llvm.usub.with.overflow.v4i8(<4 x i8> <i8 0, i8 0, i8 0, i8 0>, …
650 ; NOTE: LLVM doesn't (yet) detect the multiplication always results in a overflow
653 ; CHECK-NEXT: [[X:%.*]] = call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> <i8…
656 …%x = call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> <i8 127, i8 127, i8 127, i…
664 …%x = call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> <i8 255, i8 255, i8 255, i…
668 ; Never overflow
674 …%x = call { <4 x i8>, <4 x i1> } @llvm.sadd.with.overflow.v4i8(<4 x i8> <i8 -10, i8 -20, i8 30, i8…
682 …%x = call { <4 x i8>, <4 x i1> } @llvm.uadd.with.overflow.v4i8(<4 x i8> <i8 0, i8 32, i8 64, i8 16…
690 …%x = call { <4 x i8>, <4 x i1> } @llvm.ssub.with.overflow.v4i8(<4 x i8> <i8 -10, i8 -10, i8 -10, i…
698 …%x = call { <4 x i8>, <4 x i1> } @llvm.usub.with.overflow.v4i8(<4 x i8> <i8 255, i8 255, i8 255, i…
706 …%x = call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> <i8 -6, i8 -6, i8 -6, i8 -…
714 …%x = call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> <i8 15, i8 15, i8 15, i8 1…
724 …%x = call { <4 x i8>, <4 x i1> } @llvm.sadd.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
732 …%x = call { <4 x i8>, <4 x i1> } @llvm.uadd.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
740 …%x = call { <4 x i8>, <4 x i1> } @llvm.ssub.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
748 …%x = call { <4 x i8>, <4 x i1> } @llvm.usub.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
756 …%x = call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
764 …%x = call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> <i8 1, i8 2, i8 3, i8 4>, …
775 %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 -1)
789 …%m = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, …
800 ; CHECK-NEXT: [[M:%.*]] = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8…
806 …%m = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, …
815 ; CHECK-NEXT: [[M:%.*]] = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[X:%.*]], i8 -2)
821 %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 -2)
835 %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 -1)
849 …%m = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, …
860 ; CHECK-NEXT: [[M:%.*]] = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8…
866 …%m = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 pois…
877 ; CHECK-NEXT: [[M:%.*]] = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 [[X:%.*]], i8 2)
883 %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 2)
898 %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 -1)