mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
InstCombine: Combine (add (and %a, %b) (or %a, %b)) to (add %a, %b)
What follows bellow is a correctness proof of the transform using CVC3. $ < t.cvc A, B : BITVECTOR(32); QUERY BVPLUS(32, A & B, A | B) = BVPLUS(32, A, B); $ cvc3 < t.cvc Valid. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215400 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -313,3 +313,43 @@ define i16 @add_cttz_2(i16 %a) {
|
||||
ret i16 %b
|
||||
}
|
||||
!1 = metadata !{i16 0, i16 32}
|
||||
|
||||
define i32 @add_or_and(i32 %x, i32 %y) {
|
||||
%or = or i32 %x, %y
|
||||
%and = and i32 %x, %y
|
||||
%add = add i32 %or, %and
|
||||
ret i32 %add
|
||||
; CHECK-LABEL: @add_or_and(
|
||||
; CHECK-NEXT: add i32 %x, %y
|
||||
; CHECK-NEXT: ret i32
|
||||
}
|
||||
|
||||
define i32 @add_nsw_or_and(i32 %x, i32 %y) {
|
||||
%or = or i32 %x, %y
|
||||
%and = and i32 %x, %y
|
||||
%add = add nsw i32 %or, %and
|
||||
ret i32 %add
|
||||
; CHECK-LABEL: @add_nsw_or_and(
|
||||
; CHECK-NEXT: add nsw i32 %x, %y
|
||||
; CHECK-NEXT: ret i32
|
||||
}
|
||||
|
||||
define i32 @add_nuw_or_and(i32 %x, i32 %y) {
|
||||
%or = or i32 %x, %y
|
||||
%and = and i32 %x, %y
|
||||
%add = add nuw i32 %or, %and
|
||||
ret i32 %add
|
||||
; CHECK-LABEL: @add_nuw_or_and(
|
||||
; CHECK-NEXT: add nuw i32 %x, %y
|
||||
; CHECK-NEXT: ret i32
|
||||
}
|
||||
|
||||
define i32 @add_nuw_nsw_or_and(i32 %x, i32 %y) {
|
||||
%or = or i32 %x, %y
|
||||
%and = and i32 %x, %y
|
||||
%add = add nsw nuw i32 %or, %and
|
||||
ret i32 %add
|
||||
; CHECK-LABEL: @add_nuw_nsw_or_and(
|
||||
; CHECK-NEXT: add nuw nsw i32 %x, %y
|
||||
; CHECK-NEXT: ret i32
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user