Andrea Di Biagio | 4760813 | 2014-06-02 16:00:27 +0000 | [diff] [blame] | 1 | ; RUN: llc -mcpu=generic -march=x86 < %s | FileCheck %s |
| 2 | ; PR19858 |
| 3 | |
| 4 | declare {i8, i1} @llvm.umul.with.overflow.i8(i8 %a, i8 %b) |
| 5 | define i8 @testumulo(i32 %argc) { |
Chandler Carruth | 9f4530b | 2014-07-24 22:15:28 +0000 | [diff] [blame] | 6 | ; CHECK: imull |
Andrea Di Biagio | 4760813 | 2014-06-02 16:00:27 +0000 | [diff] [blame] | 7 | ; CHECK: testb %{{.+}}, %{{.+}} |
| 8 | ; CHECK: je [[NOOVERFLOWLABEL:.+]] |
| 9 | ; CHECK: {{.*}}[[NOOVERFLOWLABEL]]: |
| 10 | ; CHECK-NEXT: movb |
| 11 | ; CHECK-NEXT: retl |
| 12 | top: |
| 13 | %RHS = trunc i32 %argc to i8 |
| 14 | %umul = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 25, i8 %RHS) |
| 15 | %ex = extractvalue { i8, i1 } %umul, 1 |
| 16 | br i1 %ex, label %overflow, label %nooverlow |
| 17 | |
| 18 | overflow: |
| 19 | ret i8 %RHS |
| 20 | |
| 21 | nooverlow: |
| 22 | %umul.value = extractvalue { i8, i1 } %umul, 0 |
| 23 | ret i8 %umul.value |
| 24 | } |