1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -O2 -S < %s -enable-new-pm=0 | FileCheck %s
3 ; RUN: opt -passes='default<O2>' -S < %s | FileCheck %s
5 define i64 @PR36760(i64 %a) {
6 ; CHECK-LABEL: @PR36760(
8 ; CHECK-NEXT: [[TMP0:%.*]] = icmp sgt i64 [[A:%.*]], 0
9 ; CHECK-NEXT: [[DOTA:%.*]] = select i1 [[TMP0]], i64 [[A]], i64 0
10 ; CHECK-NEXT: ret i64 [[DOTA]]
13 %retval = alloca i64, align 8
14 %a.addr = alloca i64, align 8
15 store i64 %a, i64* %a.addr, align 8
16 %0 = load i64, i64* %a.addr, align 8
17 %cmp = icmp slt i64 %0, 0
18 br i1 %cmp, label %if.then, label %if.end
21 store i64 0, i64* %retval, align 8
25 %1 = load i64, i64* %a.addr, align 8
26 %shr = ashr i64 %1, 63
27 %2 = load i64, i64* %a.addr, align 8
28 %xor = xor i64 %shr, %2
29 store i64 %xor, i64* %retval, align 8
33 %3 = load i64, i64* %retval, align 8
37 define i64 @PR36760_2(i64 %a) #0 {
38 ; CHECK-LABEL: @PR36760_2(
40 ; CHECK-NEXT: [[TMP0:%.*]] = icmp slt i64 [[A:%.*]], -1
41 ; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[TMP0]], i64 [[A]], i64 -1
42 ; CHECK-NEXT: [[RETVAL_0:%.*]] = xor i64 [[TMP1]], -1
43 ; CHECK-NEXT: ret i64 [[RETVAL_0]]
46 %retval = alloca i64, align 8
47 %a.addr = alloca i64, align 8
48 store i64 %a, i64* %a.addr, align 8
49 %0 = load i64, i64* %a.addr, align 8
50 %cmp = icmp sge i64 %0, 0
51 br i1 %cmp, label %if.then, label %if.end
53 if.then: ; preds = %entry
54 store i64 0, i64* %retval, align 8
57 if.end: ; preds = %entry
58 %1 = load i64, i64* %a.addr, align 8
59 %shr = ashr i64 %1, 63
60 %2 = load i64, i64* %a.addr, align 8
61 %xor = xor i64 %shr, %2
62 store i64 %xor, i64* %retval, align 8
65 return: ; preds = %if.end, %if.then
66 %3 = load i64, i64* %retval, align 8