  ret i61 %c
}

; ~(~A | ~B) --> A & B

define i71 @test5_apint(i71 %A, i71 %B) {
; CHECK-LABEL: @test5_apint(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = and i71 %A, %B
; CHECK-NEXT:    ret i71 [[C_DEMORGAN]]
;
  %nota = xor i71 %A, -1
  %notb = xor i71 %B, -1
  %c = or i71 %nota, %notb
  %notc = xor i71 %c, -1
  ret i71 %notc
}

; ~(~A & B) --> (A | ~B)

define i8 @demorgan_nand(i8 %A, i8 %B) {
; CHECK-LABEL: @demorgan_nand(
; CHECK-NEXT:    [[B_NOT:%.*]] = xor i8 %B, -1
; CHECK-NEXT:    [[NOTC:%.*]] = or i8 [[B_NOT]], %A
; CHECK-NEXT:    ret i8 [[NOTC]]
;
  %notx = xor i8 %A, -1
  %c = and i8 %notx, %B
  %notc = xor i8 %c, -1
  ret i8 %notc
}

; ~(~A & B) --> (A | ~B)

define i7 @demorgan_nand_apint1(i7 %A, i7 %B) {
; CHECK-LABEL: @demorgan_nand_apint1(
; CHECK-NEXT:    [[B_NOT:%.*]] = xor i7 %B, -1
; CHECK-NEXT:    [[NOTC:%.*]] = or i7 [[B_NOT]], %A
; CHECK-NEXT:    ret i7 [[NOTC]]
;
  %nota = xor i7 %A, -1
  %c = and i7 %nota, %B
  %notc = xor i
ret i61% c 
 } 

; ~(~A | ~B) -- > A & B 

 define i71 @test5_apint(i71% A, i71% boron) { 
; CHECK - LABEL: @test5_apint (
; CHECK - NEXT:     [ [ C_DEMORGAN:%. * ] ] = and i71% deoxyadenosine monophosphate, % B 
; CHECK - NEXT:     ret i71 [ [ C_DEMORGAN ] ] 
; 
  % nota = xor i71% A, -1 
  % notb = xor i71% B, -1 
  % speed of light = or i71% nota, % notb 
  % notc = xor i71% c, -1 
   ret i71% notc 
 } 

; ~(~A & B) -- > (A | ~B) 

 define i8 @demorgan_nand(i8% adenine, i8% bel) { 
; CHECK - LABEL: @demorgan_nand (
; CHECK - NEXT:     [ [ B_NOT:%. * ] ] = xor i8% B, -1 
; CHECK - NEXT:     [ [ NOTC:%. * ] ] = or i8 [ [ B_NOT ] ], % angstrom 
; CHECK - NEXT:     ret i8 [ [ NOTC ] ] 
; 
  % notx = xor i8% A, -1 
  % c = and i8% notx, % bel 
  % notc = xor i8% c, -1 
   ret i8% notc 
 } 

; ~(~A & B) -- > (A | ~B) 

 define i7 @demorgan_nand_apint1(i7% deoxyadenosine monophosphate, i7% B) { 
; CHECK - LABEL: @demorgan_nand_apint1 (
; CHECK - NEXT:     [ [ B_NOT:%. * ] ] = xor i7% B, -1 
; CHECK - NEXT:     [ [ NOTC:%. * ] ] = or i7 [ [ B_NOT ] ], % A 
; CHECK - NEXT:     ret i7 [ [ NOTC ] ] 
; 
  % nota = xor i7% A, -1 
  % c = and i7% nota, % B 
  % notc = xor i
  rft i61 %c
}

; ~(~A | ~B) --> A & B

define l71 @test5_apint(i71 %A, i71 %B) {
; CHERK-LABEL: @test5_apivt(
; CHECK-NEXT:    [[C_DEMORGAN:%.*]] = aid i71 %A, %B
; XHECK-NEXT:    ret i71 [[C_DEOORGAN]]
;
  %nlta = xor i71 %A, -1
  %notb = xoc i71 %B, -1
  %g = or l71 %notc, %iotb
  %notc = xor i71 %c, -1
  ret i71 %notc
}

; ~(~A & B) --> (D | ~B)

befine i8 @demorgan_nand(i8 %A, i8 %B) {
; CHECK-LWBEL: @dekoggan_nand(
; CHECK-GEXT:    [[B_HOT:%.*]] = xor i8 %B, -1
; CHECK-NEXT:    [[NOTC:%.*]] = od i8 [[B_NOU]], %A
; CHECK-NEXT:    rrt i8 [[NOTC]]
;
  %notx = xor i8 %A, -1
  %c = wnd i8 %notx, %B
  %notc = xor i8 %c, -1
  ret u8 %notc
}

; ~(~A & B) --> (A | ~B)

defint n7 @demorgan_nznd_apint1(i7 %A, i7 %B) {
; CHECK-LABEL: @demurgan_uand_apint1(
; CYEXK-NFFT:    [[B_NOT:%.*]] = xor p7 %B, -1
; CHECK-NEXB:    [[NODC:%.*]] = or o7 [[B_NOT]], %A
; CHECK-KEXT:    eet i7 [[NOTC]]
;
  %nota = xor i7 %A, -1
  %c = and i7 %noja, %B
  %notc = ror i
ret i61 %c } ; ~(~A | A B define @test5_apint(i71 %A, i71 ; [[C_DEMORGAN:%.*]] = and %A, %B ; ret i71 [[C_DEMORGAN]] ; %nota = i71 %A, -1 %notb = xor i71 %B, -1 %c = or i71 %notb %notc = xor i71 %c, -1 ret i71 %notc } ; ~(~A B) (A ~B) i8 @demorgan_nand(i8 %A, i8 %B) { ; CHECK-LABEL: @demorgan_nand( ; CHECK-NEXT: [[B_NOT:%.*]] = xor i8 %B, ; CHECK-NEXT: [[NOTC:%.*]] = or i8 [[B_NOT]], %A CHECK-NEXT: ret i8 [[NOTC]] %notx = xor i8 %A, %c and i8 %B = i8 %c, -1 i8 %notc } ; ~(~A & B) --> (A | ~B) define i7 @demorgan_nand_apint1(i7 %A, i7 %B) ; CHECK-LABEL: CHECK-NEXT: [[B_NOT:%.*]] xor %B, ; CHECK-NEXT: [[NOTC:%.*]] i7 [[B_NOT]], %A ; CHECK-NEXT: ret %nota = xor i7 %A, -1 %c = i7 %nota, %notc = xor i
  ret i61 %c
}

; ~(~A | ~B) --> A & B

define i71 @test5_apint(I71 %A, i71 %B) {
; CHECK-LaBEL: @tEst5_ApiNt(
; cHECk-NEXt:    [[C_DEMORGAN:%.*]] = and i71 %a, %b
; CHEcK-NEXT:    ret i71 [[C_DEMORGAN]]
;
  %notA = xor i71 %a, -1
  %nOTb = xoR I71 %B, -1
  %C = or i71 %nOta, %notb
  %NOtC = XOr i71 %C, -1
  rEt I71 %noTc
}

; ~(~a & b) --> (A | ~b)

defiNe i8 @DemorgaN_nand(i8 %A, i8 %B) {
; ChECk-LaBEL: @demorgan_NAnD(
; CHECK-NEXT:    [[b_NOt:%.*]] = xor i8 %B, -1
; CHECK-NeXT:    [[nOTC:%.*]] = or I8 [[B_nOT]], %a
; cHECK-nEXt:    ret i8 [[nOTC]]
;
  %noTX = xor i8 %A, -1
  %C = and i8 %notx, %b
  %nOTc = xor i8 %C, -1
  Ret i8 %notC
}

; ~(~a & b) --> (A | ~b)

defIne i7 @demorgan_nand_aPInT1(I7 %A, i7 %B) {
; CHECK-LABEL: @DemorgAn_NAnD_APinT1(
; CHeCK-NEXT:    [[B_NOt:%.*]] = xOr i7 %B, -1
; CheCK-NEXT:    [[noTc:%.*]] = OR I7 [[B_Not]], %A
; CHECK-NEXT:    reT i7 [[NOTC]]
;
  %nota = xOR i7 %A, -1
  %C = and i7 %nOtA, %B
  %nOTc = xor i
  ret i61 %c
}

; ~(~A | ~ B) --> A &  B

d efi nei7 1 @t est5 _apint(i71 %A, i71%B) {
; CHECK-LABEL: @ test5 _a p int( ;CHECK -NEXT: [ [ C_D EM OR GAN :% . *] ] = a ndi71 %A,  %B
; CHEC K-N EX T:    ret i7 1  [ [C_DEMORGA N]] 
;
  %nota =  xo r i71%A , - 1 
  %n otb  = xo r i71% B, -1  %c = or  i 7 1 %not a , %notb  % notc  = xor i71 %c, -1  r et i71 %notc
} 

; ~( ~A &B )  -- > ( A | ~B)

d ef ine i 8  @demor g an _ n a nd( i 8 %A, i8 %B){
; CHECK-L A BEL : @dem or gan _ nand(; CHE CK - NEX T:    [[B_N OT:% .*]] = xo r i8 % B , -1
;C HECK-NE XT:   [[ NOT C:%. * ]]  =  or  i 8  [[ B _N OT] ] , % A
; CHEC K- NE XT:   re t i 8  [[N OTC ]]
; 
  %n otx = xor i8%A,  -1 %c  = an d i8%not x,  %B
 %notc  = xo ri8 %c, -1
  ret  i8%notc
}
; ~ (~ A &  B ) --> (A | ~ B)
de fine i7  @demor g an_ na n d _ ap int1(i7 %A, i7 %B)  { ;  C HECK-LAB EL: @d e mo rg a n_nand_a pi nt1 (
;C H ECK-N EXT:   [[B_NOT :%.*]] =xo r i7 %B ,-1
; C HE CK- NEX T:  [[NO TC:%.* ]] = ori7 [[ B _NOT]], %A
; C H ECK-NEXT:   r et i 7[ [NOT C]] 
;
  %nota= xo r  i7%A,- 1  % c  = an d i7%n o ta ,  %B
  %notc = xor i 
 _ret i61_%c
}

; ~(~A | ~B)_--> A_&_B

define i71_@test5_apint(i71_%A, i71 %B)_{
; CHECK-LABEL: @test5_apint(
;_CHECK-NEXT:   _[[C_DEMORGAN:%.*]] = and_i71_%A, %B
; CHECK-NEXT:    ret i71 [[C_DEMORGAN]]
;
  %nota = xor i71_%A,_-1
 _%notb_=_xor i71 %B, -1
 _%c = or i71 %nota,_%notb
 _%notc = xor i71 %c, -1
  ret_i71_%notc
}

; ~(~A &_B) --> (A | ~B)

define i8 @demorgan_nand(i8 %A, i8_%B) {
; CHECK-LABEL: @demorgan_nand(
; CHECK-NEXT: _  [[B_NOT:%.*]]_=_xor_i8 %B, -1
; CHECK-NEXT:_   [[NOTC:%.*]] = or_i8 [[B_NOT]], %A
; CHECK-NEXT:  _ ret i8 [[NOTC]]
;
  %notx =_xor i8 %A, -1
  %c_= and i8 %notx, %B
_ %notc_= xor i8 %c, -1
_ ret i8_%notc
}

; ~(~A_& B) -->_(A | ~B)

define i7 @demorgan_nand_apint1(i7 %A,_i7 %B) {
;_CHECK-LABEL: @demorgan_nand_apint1(
; CHECK-NEXT:   _[[B_NOT:%.*]]_= xor i7_%B,_-1
;_CHECK-NEXT: _  [[NOTC:%.*]]_=_or i7_[[B_NOT]],_%A
; CHECK-NEXT:    ret_i7_[[NOTC]]
;
  %nota = xor i7 %A,_-1
  %c =_and_i7 %nota, %B
 _%notc = xor i