llvm-for-llvmta/test/Transforms/SCCP/apint-xor.ll

40 lines
1.0 KiB
LLVM
Raw Normal View History

2022-04-25 10:02:23 +02:00
; 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)