apint-xor.ll
1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -sccp -S | FileCheck %s
; Test some XOR simplifications / range propagation.
define void@xor1(i1 %cmp) {
; CHECK-LABEL: @xor1(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_TRUE:%.*]], label [[END:%.*]]
; CHECK: if.true:
; CHECK-NEXT: br label [[END]]
; CHECK: end:
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: call void @use(i1 false)
; CHECK-NEXT: call void @use(i1 true)
; CHECK-NEXT: ret void
;
entry:
br i1 %cmp, label %if.true, label %end
if.true:
br label %end
end:
%p = phi i32 [ 11, %entry ], [ 11, %if.true]
%xor.1 = xor i32 %p, %p
%c.1 = icmp eq i32 %xor.1, 0
call void @use(i1 %c.1)
%c.2 = icmp eq i32 %xor.1, 10
call void @use(i1 %c.2)
%xor.2 = xor i32 %p, 1
%c.3 = icmp eq i32 %xor.2, 11
call void @use(i1 %c.3)
%c.4 = icmp eq i32 %xor.2, 10
call void @use(i1 %c.4)
ret void
}
declare void @use(i1)