diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-02-22 23:19:34 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-02-22 23:19:34 +0000 |
| commit | 973143ab79f30b3c8fc31c6d06e50c58f68221c4 (patch) | |
| tree | 6fe39118c5310c70a7ca01f688f6172b2a8cb8c4 /llvm/test/Transforms/CodeGenPrepare | |
| parent | 01f670df8f3717a66a37169d1d3c93d724bd60cf (diff) | |
| download | bcm5719-llvm-973143ab79f30b3c8fc31c6d06e50c58f68221c4.tar.gz bcm5719-llvm-973143ab79f30b3c8fc31c6d06e50c58f68221c4.zip | |
[CGP] add tests for uaddo increment/decrement; NFC
llvm-svn: 354699
Diffstat (limited to 'llvm/test/Transforms/CodeGenPrepare')
| -rw-r--r-- | llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll b/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll index 4b0bafacaf4..177aee7c2c0 100644 --- a/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll +++ b/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll @@ -158,6 +158,66 @@ define i1 @uaddo_i16_increment_noncanonical_3(i16 %x, i16* %p) { ret i1 %ov } +; The overflow check may be against the input rather than the sum. + +define i1 @uaddo_i64_increment_alt(i64 %x, i64* %p) { +; CHECK-LABEL: @uaddo_i64_increment_alt( +; CHECK-NEXT: [[A:%.*]] = add i64 [[X:%.*]], 1 +; CHECK-NEXT: store i64 [[A]], i64* [[P:%.*]] +; CHECK-NEXT: [[OV:%.*]] = icmp eq i64 [[X]], -1 +; CHECK-NEXT: ret i1 [[OV]] +; + %a = add i64 %x, 1 + store i64 %a, i64* %p + %ov = icmp eq i64 %x, -1 + ret i1 %ov +} + +; Make sure insertion is done correctly based on dominance. + +define i1 @uaddo_i64_increment_alt_dom(i64 %x, i64* %p) { +; CHECK-LABEL: @uaddo_i64_increment_alt_dom( +; CHECK-NEXT: [[OV:%.*]] = icmp eq i64 [[X:%.*]], -1 +; CHECK-NEXT: [[A:%.*]] = add i64 [[X]], 1 +; CHECK-NEXT: store i64 [[A]], i64* [[P:%.*]] +; CHECK-NEXT: ret i1 [[OV]] +; + %ov = icmp eq i64 %x, -1 + %a = add i64 %x, 1 + store i64 %a, i64* %p + ret i1 %ov +} + +; The overflow check may be against the input rather than the sum. + +define i1 @uaddo_i64_decrement_alt(i64 %x, i64* %p) { +; CHECK-LABEL: @uaddo_i64_decrement_alt( +; CHECK-NEXT: [[A:%.*]] = add i64 [[X:%.*]], -1 +; CHECK-NEXT: store i64 [[A]], i64* [[P:%.*]] +; CHECK-NEXT: [[OV:%.*]] = icmp ne i64 [[X]], 0 +; CHECK-NEXT: ret i1 [[OV]] +; + %a = add i64 %x, -1 + store i64 %a, i64* %p + %ov = icmp ne i64 %x, 0 + ret i1 %ov +} + +; Make sure insertion is done correctly based on dominance. + +define i1 @uaddo_i64_decrement_alt_dom(i64 %x, i64* %p) { +; CHECK-LABEL: @uaddo_i64_decrement_alt_dom( +; CHECK-NEXT: [[OV:%.*]] = icmp ne i64 [[X:%.*]], 0 +; CHECK-NEXT: [[A:%.*]] = add i64 [[X]], -1 +; CHECK-NEXT: store i64 [[A]], i64* [[P:%.*]] +; CHECK-NEXT: ret i1 [[OV]] +; + %ov = icmp ne i64 %x, 0 + %a = add i64 %x, -1 + store i64 %a, i64* %p + ret i1 %ov +} + ; No transform for illegal types. define i1 @uaddo_i42_increment_illegal_type(i42 %x, i42* %p) { |

