Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s
      3 
      4 define i64 @and1(i64 %x) {
      5 ; CHECK-LABEL: and1:
      6 ; CHECK:       # %bb.0:
      7 ; CHECK-NEXT:    movabsq $-2147483649, %rax # imm = 0xFFFFFFFF7FFFFFFF
      8 ; CHECK-NEXT:    andq %rdi, %rax
      9 ; CHECK-NEXT:    retq
     10   %a = and i64 %x, 18446744071562067967 ; clear bit 31
     11   ret i64 %a
     12 }
     13 
     14 define i64 @and2(i64 %x) {
     15 ; CHECK-LABEL: and2:
     16 ; CHECK:       # %bb.0:
     17 ; CHECK-NEXT:    movabsq $-4294967297, %rax # imm = 0xFFFFFFFEFFFFFFFF
     18 ; CHECK-NEXT:    andq %rdi, %rax
     19 ; CHECK-NEXT:    retq
     20   %a = and i64 %x, 18446744069414584319 ; clear bit 32
     21   ret i64 %a
     22 }
     23 
     24 define i64 @and3(i64 %x) {
     25 ; CHECK-LABEL: and3:
     26 ; CHECK:       # %bb.0:
     27 ; CHECK-NEXT:    movabsq $-4611686018427387905, %rax # imm = 0xBFFFFFFFFFFFFFFF
     28 ; CHECK-NEXT:    andq %rdi, %rax
     29 ; CHECK-NEXT:    retq
     30   %a = and i64 %x, 13835058055282163711 ; clear bit 62
     31   ret i64 %a
     32 }
     33 
     34 define i64 @and4(i64 %x) {
     35 ; CHECK-LABEL: and4:
     36 ; CHECK:       # %bb.0:
     37 ; CHECK-NEXT:    movabsq $9223372036854775807, %rax # imm = 0x7FFFFFFFFFFFFFFF
     38 ; CHECK-NEXT:    andq %rdi, %rax
     39 ; CHECK-NEXT:    retq
     40   %a = and i64 %x, 9223372036854775807 ; clear bit 63
     41   ret i64 %a
     42 }
     43 
     44 define i64 @or1(i64 %x) {
     45 ; CHECK-LABEL: or1:
     46 ; CHECK:       # %bb.0:
     47 ; CHECK-NEXT:    movl $2147483648, %eax # imm = 0x80000000
     48 ; CHECK-NEXT:    orq %rdi, %rax
     49 ; CHECK-NEXT:    retq
     50   %a = or i64 %x, 2147483648 ; set bit 31
     51   ret i64 %a
     52 }
     53 
     54 define i64 @or2(i64 %x) {
     55 ; CHECK-LABEL: or2:
     56 ; CHECK:       # %bb.0:
     57 ; CHECK-NEXT:    movabsq $4294967296, %rax # imm = 0x100000000
     58 ; CHECK-NEXT:    orq %rdi, %rax
     59 ; CHECK-NEXT:    retq
     60   %a = or i64 %x, 4294967296 ; set bit 32
     61   ret i64 %a
     62 }
     63 
     64 define i64 @or3(i64 %x) {
     65 ; CHECK-LABEL: or3:
     66 ; CHECK:       # %bb.0:
     67 ; CHECK-NEXT:    movabsq $4611686018427387904, %rax # imm = 0x4000000000000000
     68 ; CHECK-NEXT:    orq %rdi, %rax
     69 ; CHECK-NEXT:    retq
     70   %a = or i64 %x, 4611686018427387904 ; set bit 62
     71   ret i64 %a
     72 }
     73 
     74 define i64 @or4(i64 %x) {
     75 ; CHECK-LABEL: or4:
     76 ; CHECK:       # %bb.0:
     77 ; CHECK-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
     78 ; CHECK-NEXT:    orq %rdi, %rax
     79 ; CHECK-NEXT:    retq
     80   %a = or i64 %x, 9223372036854775808 ; set bit 63
     81   ret i64 %a
     82 }
     83 
     84 define i64 @xor1(i64 %x) {
     85 ; CHECK-LABEL: xor1:
     86 ; CHECK:       # %bb.0:
     87 ; CHECK-NEXT:    movl $2147483648, %eax # imm = 0x80000000
     88 ; CHECK-NEXT:    xorq %rdi, %rax
     89 ; CHECK-NEXT:    retq
     90   %a = xor i64 %x, 2147483648 ; toggle bit 31
     91   ret i64 %a
     92 }
     93 
     94 define i64 @xor2(i64 %x) {
     95 ; CHECK-LABEL: xor2:
     96 ; CHECK:       # %bb.0:
     97 ; CHECK-NEXT:    movabsq $4294967296, %rax # imm = 0x100000000
     98 ; CHECK-NEXT:    xorq %rdi, %rax
     99 ; CHECK-NEXT:    retq
    100   %a = xor i64 %x, 4294967296 ; toggle bit 32
    101   ret i64 %a
    102 }
    103 
    104 define i64 @xor3(i64 %x) {
    105 ; CHECK-LABEL: xor3:
    106 ; CHECK:       # %bb.0:
    107 ; CHECK-NEXT:    movabsq $4611686018427387904, %rax # imm = 0x4000000000000000
    108 ; CHECK-NEXT:    xorq %rdi, %rax
    109 ; CHECK-NEXT:    retq
    110   %a = xor i64 %x, 4611686018427387904 ; toggle bit 62
    111   ret i64 %a
    112 }
    113 
    114 define i64 @xor4(i64 %x) {
    115 ; CHECK-LABEL: xor4:
    116 ; CHECK:       # %bb.0:
    117 ; CHECK-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
    118 ; CHECK-NEXT:    xorq %rdi, %rax
    119 ; CHECK-NEXT:    retq
    120   %a = xor i64 %x, 9223372036854775808 ; toggle bit 63
    121   ret i64 %a
    122 }
    123 
    124 define i64 @and1_optsize(i64 %x) optsize {
    125 ; CHECK-LABEL: and1_optsize:
    126 ; CHECK:       # %bb.0:
    127 ; CHECK-NEXT:    btrq $31, %rdi
    128 ; CHECK-NEXT:    movq %rdi, %rax
    129 ; CHECK-NEXT:    retq
    130   %a = and i64 %x, 18446744071562067967 ; clear bit 31
    131   ret i64 %a
    132 }
    133 
    134 define i64 @and2_optsize(i64 %x) optsize {
    135 ; CHECK-LABEL: and2_optsize:
    136 ; CHECK:       # %bb.0:
    137 ; CHECK-NEXT:    btrq $32, %rdi
    138 ; CHECK-NEXT:    movq %rdi, %rax
    139 ; CHECK-NEXT:    retq
    140   %a = and i64 %x, 18446744069414584319 ; clear bit 32
    141   ret i64 %a
    142 }
    143 
    144 define i64 @and3_optsize(i64 %x) optsize {
    145 ; CHECK-LABEL: and3_optsize:
    146 ; CHECK:       # %bb.0:
    147 ; CHECK-NEXT:    btrq $62, %rdi
    148 ; CHECK-NEXT:    movq %rdi, %rax
    149 ; CHECK-NEXT:    retq
    150   %a = and i64 %x, 13835058055282163711 ; clear bit 62
    151   ret i64 %a
    152 }
    153 
    154 define i64 @and4_optsize(i64 %x) optsize {
    155 ; CHECK-LABEL: and4_optsize:
    156 ; CHECK:       # %bb.0:
    157 ; CHECK-NEXT:    btrq $63, %rdi
    158 ; CHECK-NEXT:    movq %rdi, %rax
    159 ; CHECK-NEXT:    retq
    160   %a = and i64 %x, 9223372036854775807 ; clear bit 63
    161   ret i64 %a
    162 }
    163 
    164 define i64 @or1_optsize(i64 %x) optsize {
    165 ; CHECK-LABEL: or1_optsize:
    166 ; CHECK:       # %bb.0:
    167 ; CHECK-NEXT:    btsq $31, %rdi
    168 ; CHECK-NEXT:    movq %rdi, %rax
    169 ; CHECK-NEXT:    retq
    170   %a = or i64 %x, 2147483648 ; set bit 31
    171   ret i64 %a
    172 }
    173 
    174 define i64 @or2_optsize(i64 %x) optsize {
    175 ; CHECK-LABEL: or2_optsize:
    176 ; CHECK:       # %bb.0:
    177 ; CHECK-NEXT:    btsq $32, %rdi
    178 ; CHECK-NEXT:    movq %rdi, %rax
    179 ; CHECK-NEXT:    retq
    180   %a = or i64 %x, 4294967296 ; set bit 32
    181   ret i64 %a
    182 }
    183 
    184 define i64 @or3_optsize(i64 %x) optsize {
    185 ; CHECK-LABEL: or3_optsize:
    186 ; CHECK:       # %bb.0:
    187 ; CHECK-NEXT:    btsq $62, %rdi
    188 ; CHECK-NEXT:    movq %rdi, %rax
    189 ; CHECK-NEXT:    retq
    190   %a = or i64 %x, 4611686018427387904 ; set bit 62
    191   ret i64 %a
    192 }
    193 
    194 define i64 @or4_optsize(i64 %x) optsize {
    195 ; CHECK-LABEL: or4_optsize:
    196 ; CHECK:       # %bb.0:
    197 ; CHECK-NEXT:    btsq $63, %rdi
    198 ; CHECK-NEXT:    movq %rdi, %rax
    199 ; CHECK-NEXT:    retq
    200   %a = or i64 %x, 9223372036854775808 ; set bit 63
    201   ret i64 %a
    202 }
    203 
    204 define i64 @xor1_optsize(i64 %x) optsize {
    205 ; CHECK-LABEL: xor1_optsize:
    206 ; CHECK:       # %bb.0:
    207 ; CHECK-NEXT:    btcq $31, %rdi
    208 ; CHECK-NEXT:    movq %rdi, %rax
    209 ; CHECK-NEXT:    retq
    210   %a = xor i64 %x, 2147483648 ; toggle bit 31
    211   ret i64 %a
    212 }
    213 
    214 define i64 @xor2_optsize(i64 %x) optsize {
    215 ; CHECK-LABEL: xor2_optsize:
    216 ; CHECK:       # %bb.0:
    217 ; CHECK-NEXT:    btcq $32, %rdi
    218 ; CHECK-NEXT:    movq %rdi, %rax
    219 ; CHECK-NEXT:    retq
    220   %a = xor i64 %x, 4294967296 ; toggle bit 32
    221   ret i64 %a
    222 }
    223 
    224 define i64 @xor3_optsize(i64 %x) optsize {
    225 ; CHECK-LABEL: xor3_optsize:
    226 ; CHECK:       # %bb.0:
    227 ; CHECK-NEXT:    btcq $62, %rdi
    228 ; CHECK-NEXT:    movq %rdi, %rax
    229 ; CHECK-NEXT:    retq
    230   %a = xor i64 %x, 4611686018427387904 ; toggle bit 62
    231   ret i64 %a
    232 }
    233 
    234 define i64 @xor4_optsize(i64 %x) optsize {
    235 ; CHECK-LABEL: xor4_optsize:
    236 ; CHECK:       # %bb.0:
    237 ; CHECK-NEXT:    btcq $63, %rdi
    238 ; CHECK-NEXT:    movq %rdi, %rax
    239 ; CHECK-NEXT:    retq
    240   %a = xor i64 %x, 9223372036854775808 ; toggle bit 63
    241   ret i64 %a
    242 }
    243