1
; RUN: opt < %s -instcombine -S | FileCheck %s
4
define i32 @foo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
5
%e = icmp slt i32 %a, %b
12
; CHECK: %e = icmp slt i32 %a, %b
13
; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d
14
; CHECK-NEXT: ret i32 [[result]]
16
define i32 @bar(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
17
%e = icmp slt i32 %a, %b
18
%f = sext i1 %e to i32
24
; CHECK: %e = icmp slt i32 %a, %b
25
; CHECK-NEXT: [[result:%.*]] = select i1 %e, i32 %c, i32 %d
26
; CHECK-NEXT: ret i32 [[result]]
29
define i32 @goo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
31
%0 = icmp slt i32 %a, %b
32
%iftmp.0.0 = select i1 %0, i32 -1, i32 0
33
%1 = and i32 %iftmp.0.0, %c
34
%not = xor i32 %iftmp.0.0, -1
38
; CHECK: %0 = icmp slt i32 %a, %b
39
; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
40
; CHECK-NEXT: ret i32 [[result]]
42
define i32 @poo(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
44
%0 = icmp slt i32 %a, %b
45
%iftmp.0.0 = select i1 %0, i32 -1, i32 0
46
%1 = and i32 %iftmp.0.0, %c
47
%iftmp = select i1 %0, i32 0, i32 -1
48
%2 = and i32 %iftmp, %d
51
; CHECK: %0 = icmp slt i32 %a, %b
52
; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
53
; CHECK-NEXT: ret i32 [[result]]
56
define i32 @par(i32 %a, i32 %b, i32 %c, i32 %d) nounwind {
58
%0 = icmp slt i32 %a, %b
59
%iftmp.1.0 = select i1 %0, i32 -1, i32 0
60
%1 = and i32 %iftmp.1.0, %c
61
%not = xor i32 %iftmp.1.0, -1
65
; CHECK: %0 = icmp slt i32 %a, %b
66
; CHECK-NEXT: [[result:%.*]] = select i1 %0, i32 %c, i32 %d
67
; CHECK-NEXT: ret i32 [[result]]