40 lines
1.0 KiB
LLVM
40 lines
1.0 KiB
LLVM
|
; 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)
|