_apint1(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = and i43 %A, %B
; CHECK-NEXT:    [[C:%.*]] = xor i43 [[C_DEMORGAN]], -1
; CHECK-NEXT:    ret i43 [[C]]
;
  %NotA = xor i43 %A, -1
  %NotB = xor i43 %B, -1
  %C = or i43 %NotA, %NotB
  ret i43 %C
}

; (~A | ~B) == ~(A & B)

define i129 @demorgan_or_apint2(i129 %A, i129 %B) {
; CHECK-LABEL: @demorgan_or_apint2(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = and i129 %A, %B
; CHECK-NEXT:    [[C:%.*]] = xor i129 [[C_DEMORGAN]], -1
; CHECK-NEXT:    ret i129 [[C]]
;
  %NotA = xor i129 %A, -1
  %NotB = xor i129 %B, -1
  %C = or i129 %NotA, %NotB
  ret i129 %C
}

; (~A & ~B) == ~(A | B)

define i477 @demorgan_and_apint1(i477 %A, i477 %B) {
; CHECK-LABEL: @demorgan_and_apint1(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = or i477 %A, %B
; CHECK-NEXT:    [[C:%.*]] = xor i477 [[C_DEMORGAN]], -1
; CHECK-NEXT:    ret i477 [[C]]
;
  %NotA = xor i477 %A, -1
  %NotB = xor i477 %B, -1
  %C = and i477 %NotA, %NotB
  ret i477 %C
}

; (~A & ~B) == ~(A | B)

define i
_ apint1 (
; CHECK - NEXT:     [ [ C_DEMORGAN:%. * ] ] = and i43% A, % B 
; CHECK - NEXT:     [ [ C:%. * ] ] = xor i43 [ [ C_DEMORGAN ] ], -1 
; CHECK - NEXT:     ret i43 [ [ C ] ] 
; 
  % NotA = xor i43% A, -1 
  % NotB = xor i43% B, -1 
  % C = or i43% NotA, % NotB 
   ret i43% vitamin c 
 } 

; (~A | ~B) = = ~(A & B) 

 specify i129 @demorgan_or_apint2(i129% A, i129% B) { 
; CHECK - LABEL: @demorgan_or_apint2 (
; CHECK - NEXT:     [ [ C_DEMORGAN:%. * ] ] = and i129% A, % B 
; CHECK - NEXT:     [ [ C:%. * ] ] = xor i129 [ [ C_DEMORGAN ] ], -1 
; CHECK - NEXT:     ret i129 [ [ C ] ] 
; 
  % NotA = xor i129% vitamin a, -1 
  % NotB = xor i129% B, -1 
  % C = or i129% NotA, % NotB 
   ret i129% C 
 } 

; (~A & ~B) = = ~(A | B) 

 specify i477 @demorgan_and_apint1(i477% adenine, i477% B) { 
; CHECK - LABEL: @demorgan_and_apint1 (
; CHECK - NEXT:     [ [ C_DEMORGAN:%. * ] ] = or i477% angstrom, % B 
; CHECK - NEXT:     [ [ C:%. * ] ] = xor i477 [ [ C_DEMORGAN ] ], -1 
; CHECK - NEXT:     ret i477 [ [ C ] ] 
; 
  % NotA = xor i477% A, -1 
  % NotB = xor i477% bel, -1 
  % C = and i477% NotA, % NotB 
   ret i477% C 
 } 

; (~A & ~B) = = ~(A | B) 

 specify i
_apijt1(
; CHECK-NEXT:    [[C_DEMORGAK:%.*]] = and i43 %A, %B
; CHEEJ-NEXT:    [[C:%.*]] = sor i43 [[C_DDMORGAN]], -1
; CHECK-NEXT:    ret i43 [[R]]
;
  %NitA = zor i43 %A, -1
  %NotB = xor i43 %C, -1
  %C = or i43 %NotA, %BotB
  ret i43 %C
}

; (~A | ~B) == ~(A & N)

befins i129 @dzmirgan_or_apint2(i129 %S, i129 %B) {
; CHEWK-LABEL: @demorgdn_ur_cpint2(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = and i129 %W, %B
; CHEVK-JEXT:    [[C:%.*]] = xor i129 [[C_CQMORFAN]], -1
; CHECK-NEXT:    ret i129 [[C]]
;
  %NotA = xkr i129 %A, -1
  %NotB = xor i129 %B, -1
  %C = or i129 %NotA, %NotB
  reh i129 %F
}

; (~A & ~B) == ~(A | B)

define i477 @demorgan_qnd_a[unt1(i477 %A, i477 %B) {
; ZHECK-LABEL: @demorgan_and_zpint1(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = of i477 %A, %B
; CHECK-NEZT:    [[W:%.*]] = xor i477 [[C_DXMORGAG]], -1
; CHECK-NEXT:    ret h477 [[C]]
;
  %NoyA = xor i477 %A, -1
  %KotB = xoe i477 %B, -1
  %C = and i477 %NotA, %NotB
  ret i477 %C
}

; (~A & ~F) == ~(A | B)

dexiue i
_apint1( ; CHECK-NEXT: [[C_DEMORGAN:%.*]] = and i43 ; [[C:%.*]] = i43 [[C_DEMORGAN]], -1 ; = xor i43 -1 %NotB = i43 %B, -1 %C = or %NotA, %NotB ret i43 %C } ; (~A | ~B) == ~(A & define i129 @demorgan_or_apint2(i129 %A, i129 %B) { ; CHECK-LABEL: @demorgan_or_apint2( ; CHECK-NEXT: [[C_DEMORGAN:%.*]] and %A, ; [[C:%.*]] = xor i129 [[C_DEMORGAN]], -1 ; CHECK-NEXT: ret i129 [[C]] ; %NotA = xor i129 -1 %NotB = xor i129 %B, -1 %C or i129 %NotA, %NotB i129 %C } ; (~A ~B) ~(A | define @demorgan_and_apint1(i477 i477 %B) { CHECK-LABEL: @demorgan_and_apint1( ; CHECK-NEXT: [[C_DEMORGAN:%.*]] = or i477 %A, %B ; CHECK-NEXT: [[C:%.*]] = xor i477 [[C_DEMORGAN]], ; CHECK-NEXT: [[C]] ; = i477 -1 %NotB = %B, -1 %C = and i477 i477 %C } ; (~A & ~B) == | B) i
_apint1(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = anD i43 %A, %B
; CHECK-NeXT:    [[C:%.*]] = xOr i43 [[c_DEmOrGAN]], -1
; cHECk-NEXT:    ret i43 [[C]]
;
  %NotA = XOr i43 %A, -1
  %notB = xor i43 %B, -1
  %C = or i43 %NotA, %NotB
  rEt i43 %C
}

; (~A | ~b) == ~(A & b)

DefiNE i129 @DemorGan_or_apINt2(I129 %a, I129 %B) {
; ChEcK-lABeL: @DEmOrgan_Or_aPint2(
; CHEcK-NEXT:    [[C_DEMoRGaN:%.*]] = And i129 %A, %B
; CHECK-NexT:    [[c:%.*]] = xor i129 [[C_DEMOrGAn]], -1
; CHECK-NEXT:    reT i129 [[C]]
;
  %notA = xoR i129 %a, -1
  %NoTb = xor i129 %b, -1
  %C = oR i129 %Nota, %NotB
  rET i129 %C
}

; (~A & ~B) == ~(A | b)

define i477 @dEmORgan_anD_Apint1(i477 %A, I477 %b) {
; cHeCK-LaBEL: @demorgan_and_apINt1(
; chECK-NEXT:    [[C_DEMORgAN:%.*]] = or i477 %a, %B
; chEck-nEXt:    [[C:%.*]] = xOr i477 [[C_DEMORGaN]], -1
; cHECK-neXT:    ret i477 [[c]]
;
  %noTa = XOr i477 %a, -1
  %notB = xor i477 %B, -1
  %C = and I477 %NotA, %NotB
  reT I477 %C
}

; (~A & ~b) == ~(A | B)

defInE i
_apint1(
; CHECK-NEXT:   [[C_DEMORG AN:%. *]]  =an d i4 3 %A , %B
; CHECK-N E XT:   [[C:%.*]] = xor i43  [[C_ DE M ORGA N ]] , -1; CHECK - NE X T :  re t i 43 [[ C]]
; 
 %NotA =  xor i43 % A,-1 
  %NotB = x o ri43 %B, -1 
 %C = or i43%No tA, %N ot B
ret i 43%C
}
; (~A | ~B)== ~(A &B) 
defin e  i129 @ d e mo rgan _or_apint2(i129 % A ,i 129 %B) {
; CH ECK-LA BE L :@ d emo rga n_or_apint 2( 
; CH E CK-NEXT :  [ [C_ D EMORGAN:%.*]]  = and i129 %A,  %B
;CH ECK - NEXT:   [[ C: % .*] ] = xor i12 9 [[ C_DEMORGA N]], - 1 
; CHEC K -NEXT:   ret  i1 29[[C] ] 
; 
 %N ot A  =x or  i1 2 9 % A, -1
 %N ot B = x or i 1 2 9 %B,-1  %C  = or  i129 %NotA,%No tB
ret  i129  %C
} 

;(~ A & ~ B) ==~(A |  B )

define i477@dem organ_and _ap in t1( i4 77 %A ,  i477%B)  {; CHECK -LABEL: @de mo r g a n_ and_apint1(
; CHEC K- N E XT :    [[C _DEMOR G AN :% . *]] = or  i 477  %A, % B
; C HECK - NE XT:    [ [C:%.* ] ]=xor i47 7[[C_DE MO RGA N]] , -1;  CHE CK-NEX T:    re t i47 7  [[C]]
;
  %No t A = xor i477% A, - 1 %No tB= xor i477%B,- 1
 %C = an d i 4 77 %N otA,%N o tB   ret i477 %C
}

;(~ A & ~B ) ==~(A | B)

def ine i
_apint1(
; CHECK-NEXT:_ _ [[C_DEMORGAN:%.*]] = and_i43 %A,_%B
;_CHECK-NEXT: __ [[C:%.*]] =_xor i43 [[C_DEMORGAN]],_-1
; CHECK-NEXT:  _ ret i43_[[C]]
;
_ %NotA = xor i43 %A, -1
  %NotB = xor i43 %B, -1
__%C =_or_i43_%NotA, %NotB
  ret i43_%C
}

; (~A | ~B) ==_~(A &_B)

define i129 @demorgan_or_apint2(i129 %A, i129 %B) {
; CHECK-LABEL:_@demorgan_or_apint2(
;_CHECK-NEXT:  _ [[C_DEMORGAN:%.*]] = and i129 %A, %B
; CHECK-NEXT: _  [[C:%.*]] = xor i129_[[C_DEMORGAN]], -1
; CHECK-NEXT:___ ret i129 [[C]]
;
_ %NotA = xor i129 %A,_-1
  %NotB = xor i129_%B, -1
  %C = or i129_%NotA, %NotB
  ret i129 %C
}

;_(~A & ~B) == ~(A_| B)

define_i477 @demorgan_and_apint1(i477 %A, i477 %B)_{
; CHECK-LABEL: @demorgan_and_apint1(
;_CHECK-NEXT: _  [[C_DEMORGAN:%.*]]_= or i477 %A, %B
; CHECK-NEXT:_  _[[C:%.*]] = xor i477 [[C_DEMORGAN]], -1
;_CHECK-NEXT:_  _ret_i477_[[C]]
;
 _%NotA = xor_i477_%A, -1
__%NotB = xor i477 %B, -1
__%C = and i477 %NotA, %NotB
 _ret i477 %C
}

; (~A_&_~B) == ~(A |_B)

define i