1c4d0509eSFilipp Zhinkin; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2c4d0509eSFilipp Zhinkin; RUN: llc -mtriple=armv7a < %s | FileCheck %s --check-prefix=ARM 3c4d0509eSFilipp Zhinkin; RUN: llc -mtriple=armv6m < %s | FileCheck %s --check-prefix=THUMB 4c4d0509eSFilipp Zhinkin; RUN: llc -mtriple=armv7m < %s | FileCheck %s --check-prefix=THUMB2 5c4d0509eSFilipp Zhinkin 6c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_rr(i32 %a, i32 %b) { 7c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_rr: 8c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 9c4d0509eSFilipp Zhinkin; ARM-NEXT: ands r0, r0, r1 10c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 11c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 12c4d0509eSFilipp Zhinkin; 13c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_rr: 14c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 15c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 16c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 17c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 18c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 19c4d0509eSFilipp Zhinkin; 20c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_rr: 21c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 22c4d0509eSFilipp Zhinkin; THUMB2-NEXT: ands r0, r1 23c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 24c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 25c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 26c4d0509eSFilipp Zhinkin %and = and i32 %a, %b 27c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 28c4d0509eSFilipp Zhinkin ret i1 %res 29c4d0509eSFilipp Zhinkin} 30c4d0509eSFilipp Zhinkin 31c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_ri(i32 %a) { 32c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_ri: 33c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 34c4d0509eSFilipp Zhinkin; ARM-NEXT: ands r0, r0, #42 35c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 36c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 37c4d0509eSFilipp Zhinkin; 38c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_ri: 39c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 40c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 41c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 42c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 43c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 44c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 45c4d0509eSFilipp Zhinkin; 46c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_ri: 47c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 48c4d0509eSFilipp Zhinkin; THUMB2-NEXT: ands r0, r0, #42 49c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 50c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 51c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 52c4d0509eSFilipp Zhinkin %and = and i32 %a, 42 53c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 54c4d0509eSFilipp Zhinkin ret i1 %res 55c4d0509eSFilipp Zhinkin} 56c4d0509eSFilipp Zhinkin 57c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_rsr(i32 %a, i32 %b, i32 %c) { 58c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_rsr: 59c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 60*945a1468SFilipp Zhinkin; ARM-NEXT: ands r0, r0, r1, lsl r2 61c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 62c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 63c4d0509eSFilipp Zhinkin; 64c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_rsr: 65c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 66c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 67c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 68c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 69c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 70c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 71c4d0509eSFilipp Zhinkin; 72c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_rsr: 73c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 74c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 75c4d0509eSFilipp Zhinkin; THUMB2-NEXT: ands r0, r1 76c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 77c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 78c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 79c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 80c4d0509eSFilipp Zhinkin %and = and i32 %sh, %a 81c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 82c4d0509eSFilipp Zhinkin ret i1 %res 83c4d0509eSFilipp Zhinkin} 84c4d0509eSFilipp Zhinkin 85c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_rsi(i32 %a, i32 %b) { 86c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_rsi: 87c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 88*945a1468SFilipp Zhinkin; ARM-NEXT: ands r0, r0, r1, lsr #17 89c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 90c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 91c4d0509eSFilipp Zhinkin; 92c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_rsi: 93c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 94c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 95c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 96c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 97c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 98c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 99c4d0509eSFilipp Zhinkin; 100c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_rsi: 101c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 102*945a1468SFilipp Zhinkin; THUMB2-NEXT: ands.w r0, r0, r1, lsr #17 103c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 104c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 105c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 106c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 107c4d0509eSFilipp Zhinkin %and = and i32 %sh, %a 108c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 109c4d0509eSFilipp Zhinkin ret i1 %res 110c4d0509eSFilipp Zhinkin} 111c4d0509eSFilipp Zhinkin 112c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_or_rr(i32 %a, i32 %b) { 113c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_or_rr: 114c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 115c4d0509eSFilipp Zhinkin; ARM-NEXT: orrs r0, r0, r1 116c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 117c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 118c4d0509eSFilipp Zhinkin; 119c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_or_rr: 120c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 121c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 122c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 123c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 124c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 125c4d0509eSFilipp Zhinkin; 126c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_or_rr: 127c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 128c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orrs r0, r1 129c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 130c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 131c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 132c4d0509eSFilipp Zhinkin %or = or i32 %a, %b 133c4d0509eSFilipp Zhinkin %res = icmp ne i32 %or, 0 134c4d0509eSFilipp Zhinkin ret i1 %res 135c4d0509eSFilipp Zhinkin} 136c4d0509eSFilipp Zhinkin 137c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_or_ri(i32 %a) { 138c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_or_ri: 139c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 140c4d0509eSFilipp Zhinkin; ARM-NEXT: orrs r0, r0, #42 141c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 142c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 143c4d0509eSFilipp Zhinkin; 144c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_or_ri: 145c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 146c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 147c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 148c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 149c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 150c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 151c4d0509eSFilipp Zhinkin; 152c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_or_ri: 153c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 154c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orrs r0, r0, #42 155c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 156c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 157c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 158c4d0509eSFilipp Zhinkin %or = or i32 %a, 42 159c4d0509eSFilipp Zhinkin %res = icmp ne i32 %or, 0 160c4d0509eSFilipp Zhinkin ret i1 %res 161c4d0509eSFilipp Zhinkin} 162c4d0509eSFilipp Zhinkin 163c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_or_rsr(i32 %a, i32 %b, i32 %c) { 164c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_or_rsr: 165c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 166*945a1468SFilipp Zhinkin; ARM-NEXT: orrs r0, r0, r1, lsl r2 167c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 168c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 169c4d0509eSFilipp Zhinkin; 170c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_or_rsr: 171c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 172c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 173c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 174c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 175c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 176c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 177c4d0509eSFilipp Zhinkin; 178c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_or_rsr: 179c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 180c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 181c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orrs r0, r1 182c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 183c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 184c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 185c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 186c4d0509eSFilipp Zhinkin %or = or i32 %sh, %a 187c4d0509eSFilipp Zhinkin %res = icmp ne i32 %or, 0 188c4d0509eSFilipp Zhinkin ret i1 %res 189c4d0509eSFilipp Zhinkin} 190c4d0509eSFilipp Zhinkin 191c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_or_rsi(i32 %a, i32 %b) { 192c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_or_rsi: 193c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 194*945a1468SFilipp Zhinkin; ARM-NEXT: orrs r0, r0, r1, lsr #17 195c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 196c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 197c4d0509eSFilipp Zhinkin; 198c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_or_rsi: 199c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 200c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 201c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 202c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 203c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 204c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 205c4d0509eSFilipp Zhinkin; 206c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_or_rsi: 207c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 208*945a1468SFilipp Zhinkin; THUMB2-NEXT: orrs.w r0, r0, r1, lsr #17 209c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 210c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 211c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 212c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 213c4d0509eSFilipp Zhinkin %or = or i32 %sh, %a 214c4d0509eSFilipp Zhinkin %res = icmp ne i32 %or, 0 215c4d0509eSFilipp Zhinkin ret i1 %res 216c4d0509eSFilipp Zhinkin} 217c4d0509eSFilipp Zhinkin 218c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_xor_rr(i32 %a, i32 %b) { 219c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_xor_rr: 220c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 221c4d0509eSFilipp Zhinkin; ARM-NEXT: eors r0, r0, r1 222c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 223c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 224c4d0509eSFilipp Zhinkin; 225c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_xor_rr: 226c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 227c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 228c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 229c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 230c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 231c4d0509eSFilipp Zhinkin; 232c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_xor_rr: 233c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 234c4d0509eSFilipp Zhinkin; THUMB2-NEXT: eors r0, r1 235c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 236c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 237c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 238c4d0509eSFilipp Zhinkin %xor = xor i32 %a, %b 239c4d0509eSFilipp Zhinkin %res = icmp ne i32 %xor, 0 240c4d0509eSFilipp Zhinkin ret i1 %res 241c4d0509eSFilipp Zhinkin} 242c4d0509eSFilipp Zhinkin 243c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_xor_ri(i32 %a) { 244c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_xor_ri: 245c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 246c4d0509eSFilipp Zhinkin; ARM-NEXT: subs r0, r0, #42 247c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 248c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 249c4d0509eSFilipp Zhinkin; 250c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_xor_ri: 251c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 252c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r0, #42 253c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 254c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 255c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 256c4d0509eSFilipp Zhinkin; 257c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_xor_ri: 258c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 259c4d0509eSFilipp Zhinkin; THUMB2-NEXT: subs r0, #42 260c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 261c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 262c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 263c4d0509eSFilipp Zhinkin %xor = xor i32 %a, 42 264c4d0509eSFilipp Zhinkin %res = icmp ne i32 %xor, 0 265c4d0509eSFilipp Zhinkin ret i1 %res 266c4d0509eSFilipp Zhinkin} 267c4d0509eSFilipp Zhinkin 268c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_xor_rsr(i32 %a, i32 %b, i32 %c) { 269c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_xor_rsr: 270c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 271*945a1468SFilipp Zhinkin; ARM-NEXT: eors r0, r0, r1, lsl r2 272c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 273c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 274c4d0509eSFilipp Zhinkin; 275c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_xor_rsr: 276c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 277c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 278c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 279c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 280c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 281c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 282c4d0509eSFilipp Zhinkin; 283c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_xor_rsr: 284c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 285c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 286c4d0509eSFilipp Zhinkin; THUMB2-NEXT: eors r0, r1 287c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 288c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 289c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 290c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 291c4d0509eSFilipp Zhinkin %xor = xor i32 %sh, %a 292c4d0509eSFilipp Zhinkin %res = icmp ne i32 %xor, 0 293c4d0509eSFilipp Zhinkin ret i1 %res 294c4d0509eSFilipp Zhinkin} 295c4d0509eSFilipp Zhinkin 296c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_xor_rsi(i32 %a, i32 %b) { 297c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_xor_rsi: 298c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 299*945a1468SFilipp Zhinkin; ARM-NEXT: eors r0, r0, r1, lsr #17 300c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 301c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 302c4d0509eSFilipp Zhinkin; 303c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_xor_rsi: 304c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 305c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 306c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 307c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 308c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 309c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 310c4d0509eSFilipp Zhinkin; 311c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_xor_rsi: 312c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 313*945a1468SFilipp Zhinkin; THUMB2-NEXT: eors.w r0, r0, r1, lsr #17 314c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 315c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 316c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 317c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 318c4d0509eSFilipp Zhinkin %xor = xor i32 %sh, %a 319c4d0509eSFilipp Zhinkin %res = icmp ne i32 %xor, 0 320c4d0509eSFilipp Zhinkin ret i1 %res 321c4d0509eSFilipp Zhinkin} 322c4d0509eSFilipp Zhinkin 323c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_not_rr(i32 %a, i32 %b) { 324c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_not_rr: 325c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 326*945a1468SFilipp Zhinkin; ARM-NEXT: bics r0, r0, r1 327c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 328c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 329c4d0509eSFilipp Zhinkin; 330c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_not_rr: 331c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 332c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 333c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 334c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 335c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 336c4d0509eSFilipp Zhinkin; 337c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_not_rr: 338c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 339c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bics r0, r1 340c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 341c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 342c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 343c4d0509eSFilipp Zhinkin %not = xor i32 %b, -1 344c4d0509eSFilipp Zhinkin %and = and i32 %a, %not 345c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 346c4d0509eSFilipp Zhinkin ret i1 %res 347c4d0509eSFilipp Zhinkin} 348c4d0509eSFilipp Zhinkin 349c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_not_ri(i32 %a) { 350c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_not_ri: 351c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 352*945a1468SFilipp Zhinkin; ARM-NEXT: bics r0, r0, #42 353c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 354c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 355c4d0509eSFilipp Zhinkin; 356c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_not_ri: 357c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 358c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 359c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 360c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 361c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 362c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 363c4d0509eSFilipp Zhinkin; 364c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_not_ri: 365c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 366*945a1468SFilipp Zhinkin; THUMB2-NEXT: bics r0, r0, #42 367c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 368c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 369c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 370c4d0509eSFilipp Zhinkin %not = xor i32 42, -1 371c4d0509eSFilipp Zhinkin %and = and i32 %a, %not 372c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 373c4d0509eSFilipp Zhinkin ret i1 %res 374c4d0509eSFilipp Zhinkin} 375c4d0509eSFilipp Zhinkin 376c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_not_rsr(i32 %a, i32 %b, i32 %c) { 377c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_not_rsr: 378c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 379*945a1468SFilipp Zhinkin; ARM-NEXT: bics r0, r0, r1, lsl r2 380c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 381c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 382c4d0509eSFilipp Zhinkin; 383c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_not_rsr: 384c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 385c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 386c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 387c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 388c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 389c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 390c4d0509eSFilipp Zhinkin; 391c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_not_rsr: 392c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 393c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 394c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bics r0, r1 395c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 396c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 397c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 398c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 399c4d0509eSFilipp Zhinkin %not = xor i32 %sh, -1 400c4d0509eSFilipp Zhinkin %and = and i32 %not, %a 401c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 402c4d0509eSFilipp Zhinkin ret i1 %res 403c4d0509eSFilipp Zhinkin} 404c4d0509eSFilipp Zhinkin 405c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_and_not_rsi(i32 %a, i32 %b) { 406c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_and_not_rsi: 407c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 408*945a1468SFilipp Zhinkin; ARM-NEXT: bics r0, r0, r1, lsr #17 409c4d0509eSFilipp Zhinkin; ARM-NEXT: movwne r0, #1 410c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 411c4d0509eSFilipp Zhinkin; 412c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_and_not_rsi: 413c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 414c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 415c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 416c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 417c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 418c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 419c4d0509eSFilipp Zhinkin; 420c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_and_not_rsi: 421c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 422*945a1468SFilipp Zhinkin; THUMB2-NEXT: bics.w r0, r0, r1, lsr #17 423c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 424c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 425c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 426c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 427c4d0509eSFilipp Zhinkin %not = xor i32 %sh, -1 428c4d0509eSFilipp Zhinkin %and = and i32 %not, %a 429c4d0509eSFilipp Zhinkin %res = icmp ne i32 %and, 0 430c4d0509eSFilipp Zhinkin ret i1 %res 431c4d0509eSFilipp Zhinkin} 432c4d0509eSFilipp Zhinkin 433c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_shl_rr(i32 %a, i32 %b) { 434c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_shl_rr: 435c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 436*945a1468SFilipp Zhinkin; ARM-NEXT: lsls r0, r0, r1 437*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 438c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 439c4d0509eSFilipp Zhinkin; 440c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_shl_rr: 441c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 442c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r0, r1 443c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 444c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 445c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 446c4d0509eSFilipp Zhinkin; 447c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_shl_rr: 448c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 449c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r0, r1 450c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 451c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 452c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 453c4d0509eSFilipp Zhinkin %sh = shl i32 %a, %b 454c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 455c4d0509eSFilipp Zhinkin ret i1 %cmp 456c4d0509eSFilipp Zhinkin} 457c4d0509eSFilipp Zhinkin 458c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_shl_ri(i32 %a) { 459c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_shl_ri: 460c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 461*945a1468SFilipp Zhinkin; ARM-NEXT: lsls r0, r0, #7 462*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 463c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 464c4d0509eSFilipp Zhinkin; 465c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_shl_ri: 466c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 467c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r0, r0, #7 468c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 469c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 470c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 471c4d0509eSFilipp Zhinkin; 472c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_shl_ri: 473c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 474c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r0, r0, #7 475c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 476c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 477c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 478c4d0509eSFilipp Zhinkin %sh = shl i32 %a, 7 479c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 480c4d0509eSFilipp Zhinkin ret i1 %cmp 481c4d0509eSFilipp Zhinkin} 482c4d0509eSFilipp Zhinkin 483c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_lshr_rr(i32 %a, i32 %b) { 484c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_lshr_rr: 485c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 486*945a1468SFilipp Zhinkin; ARM-NEXT: lsrs r0, r0, r1 487*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 488c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 489c4d0509eSFilipp Zhinkin; 490c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_lshr_rr: 491c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 492c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r0, r1 493c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 494c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 495c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 496c4d0509eSFilipp Zhinkin; 497c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_lshr_rr: 498c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 499c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r1 500c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 501c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 502c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 503c4d0509eSFilipp Zhinkin %sh = lshr i32 %a, %b 504c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 505c4d0509eSFilipp Zhinkin ret i1 %cmp 506c4d0509eSFilipp Zhinkin} 507c4d0509eSFilipp Zhinkin 508c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_lshr_ri(i32 %a) { 509c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_lshr_ri: 510c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 511*945a1468SFilipp Zhinkin; ARM-NEXT: lsrs r0, r0, #7 512*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 513c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 514c4d0509eSFilipp Zhinkin; 515c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_lshr_ri: 516c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 517c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r0, r0, #7 518c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 519c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 520c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 521c4d0509eSFilipp Zhinkin; 522c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_lshr_ri: 523c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 524c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #7 525c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 526c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 527c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 528c4d0509eSFilipp Zhinkin %sh = lshr i32 %a, 7 529c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 530c4d0509eSFilipp Zhinkin ret i1 %cmp 531c4d0509eSFilipp Zhinkin} 532c4d0509eSFilipp Zhinkin 533c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_ashr_rr(i32 %a, i32 %b) { 534c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_ashr_rr: 535c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 536*945a1468SFilipp Zhinkin; ARM-NEXT: asrs r0, r0, r1 537*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 538c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 539c4d0509eSFilipp Zhinkin; 540c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_ashr_rr: 541c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 542c4d0509eSFilipp Zhinkin; THUMB-NEXT: asrs r0, r1 543c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 544c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 545c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 546c4d0509eSFilipp Zhinkin; 547c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_ashr_rr: 548c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 549c4d0509eSFilipp Zhinkin; THUMB2-NEXT: asrs r0, r1 550c4d0509eSFilipp Zhinkin; THUMB2-NEXT: cmp r0, #0 551c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 552c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 553c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 554c4d0509eSFilipp Zhinkin %sh = ashr i32 %a, %b 555c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 556c4d0509eSFilipp Zhinkin ret i1 %cmp 557c4d0509eSFilipp Zhinkin} 558c4d0509eSFilipp Zhinkin 559c4d0509eSFilipp Zhinkindefine i1 @cmp_ne_zero_ashr_ri(i32 %a) { 560c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_ne_zero_ashr_ri: 561c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 562*945a1468SFilipp Zhinkin; ARM-NEXT: asrs r0, r0, #7 563*945a1468SFilipp Zhinkin; ARM-NEXT: movwne r0, #1 564c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 565c4d0509eSFilipp Zhinkin; 566c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_ne_zero_ashr_ri: 567c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 568c4d0509eSFilipp Zhinkin; THUMB-NEXT: asrs r0, r0, #7 569c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r1, r0, #1 570c4d0509eSFilipp Zhinkin; THUMB-NEXT: sbcs r0, r1 571c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 572c4d0509eSFilipp Zhinkin; 573c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_ne_zero_ashr_ri: 574c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 575c4d0509eSFilipp Zhinkin; THUMB2-NEXT: asrs r0, r0, #7 576c4d0509eSFilipp Zhinkin; THUMB2-NEXT: cmp r0, #0 577c4d0509eSFilipp Zhinkin; THUMB2-NEXT: it ne 578c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movne r0, #1 579c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 580c4d0509eSFilipp Zhinkin %sh = ashr i32 %a, 7 581c4d0509eSFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 582c4d0509eSFilipp Zhinkin ret i1 %cmp 583c4d0509eSFilipp Zhinkin} 584c4d0509eSFilipp Zhinkin 585c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_rr(i32 %a, i32 %b) { 586c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_rr: 587c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 588c4d0509eSFilipp Zhinkin; ARM-NEXT: and r0, r0, r1 589c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 590c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 591c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 592c4d0509eSFilipp Zhinkin; 593c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_rr: 594c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 595c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 596c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 597c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 598c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 599c4d0509eSFilipp Zhinkin; 600c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_rr: 601c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 602c4d0509eSFilipp Zhinkin; THUMB2-NEXT: ands r0, r1 603c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 604c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 605c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 606c4d0509eSFilipp Zhinkin %and = and i32 %a, %b 607c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 608c4d0509eSFilipp Zhinkin ret i1 %res 609c4d0509eSFilipp Zhinkin} 610c4d0509eSFilipp Zhinkin 611c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_ri(i32 %a) { 612c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_ri: 613c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 614c4d0509eSFilipp Zhinkin; ARM-NEXT: and r0, r0, #42 615c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 616c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 617c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 618c4d0509eSFilipp Zhinkin; 619c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_ri: 620c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 621c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 622c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 623c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 624c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 625c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 626c4d0509eSFilipp Zhinkin; 627c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_ri: 628c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 629c4d0509eSFilipp Zhinkin; THUMB2-NEXT: and r0, r0, #42 630c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 631c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 632c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 633c4d0509eSFilipp Zhinkin %and = and i32 %a, 42 634c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 635c4d0509eSFilipp Zhinkin ret i1 %res 636c4d0509eSFilipp Zhinkin} 637c4d0509eSFilipp Zhinkin 638c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_rsr(i32 %a, i32 %b, i32 %c) { 639c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_rsr: 640c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 641c4d0509eSFilipp Zhinkin; ARM-NEXT: and r0, r0, r1, lsl r2 642c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 643c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 644c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 645c4d0509eSFilipp Zhinkin; 646c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_rsr: 647c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 648c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 649c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 650c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 651c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 652c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 653c4d0509eSFilipp Zhinkin; 654c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_rsr: 655c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 656c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 657c4d0509eSFilipp Zhinkin; THUMB2-NEXT: ands r0, r1 658c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 659c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 660c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 661c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 662c4d0509eSFilipp Zhinkin %and = and i32 %sh, %a 663c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 664c4d0509eSFilipp Zhinkin ret i1 %res 665c4d0509eSFilipp Zhinkin} 666c4d0509eSFilipp Zhinkin 667c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_rsi(i32 %a, i32 %b) { 668c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_rsi: 669c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 670c4d0509eSFilipp Zhinkin; ARM-NEXT: and r0, r0, r1, lsr #17 671c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 672c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 673c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 674c4d0509eSFilipp Zhinkin; 675c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_rsi: 676c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 677c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 678c4d0509eSFilipp Zhinkin; THUMB-NEXT: ands r0, r1 679c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 680c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 681c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 682c4d0509eSFilipp Zhinkin; 683c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_rsi: 684c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 685c4d0509eSFilipp Zhinkin; THUMB2-NEXT: and.w r0, r0, r1, lsr #17 686c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 687c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 688c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 689c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 690c4d0509eSFilipp Zhinkin %and = and i32 %sh, %a 691c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 692c4d0509eSFilipp Zhinkin ret i1 %res 693c4d0509eSFilipp Zhinkin} 694c4d0509eSFilipp Zhinkin 695c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_or_rr(i32 %a, i32 %b) { 696c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_or_rr: 697c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 698c4d0509eSFilipp Zhinkin; ARM-NEXT: orr r0, r0, r1 699c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 700c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 701c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 702c4d0509eSFilipp Zhinkin; 703c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_or_rr: 704c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 705c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 706c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 707c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 708c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 709c4d0509eSFilipp Zhinkin; 710c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_or_rr: 711c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 712c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orrs r0, r1 713c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 714c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 715c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 716c4d0509eSFilipp Zhinkin %or = or i32 %a, %b 717c4d0509eSFilipp Zhinkin %res = icmp eq i32 %or, 0 718c4d0509eSFilipp Zhinkin ret i1 %res 719c4d0509eSFilipp Zhinkin} 720c4d0509eSFilipp Zhinkin 721c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_or_ri(i32 %a) { 722c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_or_ri: 723c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 724c4d0509eSFilipp Zhinkin; ARM-NEXT: mov r0, #0 725c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 726c4d0509eSFilipp Zhinkin; 727c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_or_ri: 728c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 729c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 730c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 731c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 732c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 733c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 734c4d0509eSFilipp Zhinkin; 735c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_or_ri: 736c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 737c4d0509eSFilipp Zhinkin; THUMB2-NEXT: movs r0, #0 738c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 739c4d0509eSFilipp Zhinkin %or = or i32 %a, 42 740c4d0509eSFilipp Zhinkin %res = icmp eq i32 %or, 0 741c4d0509eSFilipp Zhinkin ret i1 %res 742c4d0509eSFilipp Zhinkin} 743c4d0509eSFilipp Zhinkin 744c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_or_rsr(i32 %a, i32 %b, i32 %c) { 745c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_or_rsr: 746c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 747c4d0509eSFilipp Zhinkin; ARM-NEXT: orr r0, r0, r1, lsl r2 748c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 749c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 750c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 751c4d0509eSFilipp Zhinkin; 752c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_or_rsr: 753c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 754c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 755c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 756c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 757c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 758c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 759c4d0509eSFilipp Zhinkin; 760c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_or_rsr: 761c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 762c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 763c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orrs r0, r1 764c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 765c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 766c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 767c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 768c4d0509eSFilipp Zhinkin %or = or i32 %sh, %a 769c4d0509eSFilipp Zhinkin %res = icmp eq i32 %or, 0 770c4d0509eSFilipp Zhinkin ret i1 %res 771c4d0509eSFilipp Zhinkin} 772c4d0509eSFilipp Zhinkin 773c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_or_rsi(i32 %a, i32 %b) { 774c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_or_rsi: 775c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 776c4d0509eSFilipp Zhinkin; ARM-NEXT: orr r0, r0, r1, lsr #17 777c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 778c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 779c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 780c4d0509eSFilipp Zhinkin; 781c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_or_rsi: 782c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 783c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 784c4d0509eSFilipp Zhinkin; THUMB-NEXT: orrs r0, r1 785c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 786c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 787c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 788c4d0509eSFilipp Zhinkin; 789c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_or_rsi: 790c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 791c4d0509eSFilipp Zhinkin; THUMB2-NEXT: orr.w r0, r0, r1, lsr #17 792c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 793c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 794c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 795c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 796c4d0509eSFilipp Zhinkin %or = or i32 %sh, %a 797c4d0509eSFilipp Zhinkin %res = icmp eq i32 %or, 0 798c4d0509eSFilipp Zhinkin ret i1 %res 799c4d0509eSFilipp Zhinkin} 800c4d0509eSFilipp Zhinkin 801c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_xor_rr(i32 %a, i32 %b) { 802c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_xor_rr: 803c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 804c4d0509eSFilipp Zhinkin; ARM-NEXT: eor r0, r0, r1 805c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 806c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 807c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 808c4d0509eSFilipp Zhinkin; 809c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_xor_rr: 810c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 811c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 812c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 813c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 814c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 815c4d0509eSFilipp Zhinkin; 816c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_xor_rr: 817c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 818c4d0509eSFilipp Zhinkin; THUMB2-NEXT: eors r0, r1 819c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 820c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 821c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 822c4d0509eSFilipp Zhinkin %xor = xor i32 %a, %b 823c4d0509eSFilipp Zhinkin %res = icmp eq i32 %xor, 0 824c4d0509eSFilipp Zhinkin ret i1 %res 825c4d0509eSFilipp Zhinkin} 826c4d0509eSFilipp Zhinkin 827c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_xor_ri(i32 %a) { 828c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_xor_ri: 829c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 830c4d0509eSFilipp Zhinkin; ARM-NEXT: sub r0, r0, #42 831c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 832c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 833c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 834c4d0509eSFilipp Zhinkin; 835c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_xor_ri: 836c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 837c4d0509eSFilipp Zhinkin; THUMB-NEXT: subs r0, #42 838c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 839c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 840c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 841c4d0509eSFilipp Zhinkin; 842c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_xor_ri: 843c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 844c4d0509eSFilipp Zhinkin; THUMB2-NEXT: subs r0, #42 845c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 846c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 847c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 848c4d0509eSFilipp Zhinkin %xor = xor i32 %a, 42 849c4d0509eSFilipp Zhinkin %res = icmp eq i32 %xor, 0 850c4d0509eSFilipp Zhinkin ret i1 %res 851c4d0509eSFilipp Zhinkin} 852c4d0509eSFilipp Zhinkin 853c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_xor_rsr(i32 %a, i32 %b, i32 %c) { 854c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_xor_rsr: 855c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 856c4d0509eSFilipp Zhinkin; ARM-NEXT: eor r0, r0, r1, lsl r2 857c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 858c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 859c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 860c4d0509eSFilipp Zhinkin; 861c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_xor_rsr: 862c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 863c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 864c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 865c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 866c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 867c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 868c4d0509eSFilipp Zhinkin; 869c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_xor_rsr: 870c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 871c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 872c4d0509eSFilipp Zhinkin; THUMB2-NEXT: eors r0, r1 873c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 874c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 875c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 876c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 877c4d0509eSFilipp Zhinkin %xor = xor i32 %sh, %a 878c4d0509eSFilipp Zhinkin %res = icmp eq i32 %xor, 0 879c4d0509eSFilipp Zhinkin ret i1 %res 880c4d0509eSFilipp Zhinkin} 881c4d0509eSFilipp Zhinkin 882c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_xor_rsi(i32 %a, i32 %b) { 883c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_xor_rsi: 884c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 885c4d0509eSFilipp Zhinkin; ARM-NEXT: eor r0, r0, r1, lsr #17 886c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 887c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 888c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 889c4d0509eSFilipp Zhinkin; 890c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_xor_rsi: 891c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 892c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 893c4d0509eSFilipp Zhinkin; THUMB-NEXT: eors r0, r1 894c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 895c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 896c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 897c4d0509eSFilipp Zhinkin; 898c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_xor_rsi: 899c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 900c4d0509eSFilipp Zhinkin; THUMB2-NEXT: eor.w r0, r0, r1, lsr #17 901c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 902c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 903c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 904c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 905c4d0509eSFilipp Zhinkin %xor = xor i32 %sh, %a 906c4d0509eSFilipp Zhinkin %res = icmp eq i32 %xor, 0 907c4d0509eSFilipp Zhinkin ret i1 %res 908c4d0509eSFilipp Zhinkin} 909c4d0509eSFilipp Zhinkin 910c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_not_rr(i32 %a, i32 %b) { 911c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_not_rr: 912c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 913c4d0509eSFilipp Zhinkin; ARM-NEXT: bic r0, r0, r1 914c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 915c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 916c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 917c4d0509eSFilipp Zhinkin; 918c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_not_rr: 919c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 920c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 921c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 922c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 923c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 924c4d0509eSFilipp Zhinkin; 925c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_not_rr: 926c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 927c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bics r0, r1 928c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 929c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 930c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 931c4d0509eSFilipp Zhinkin %not = xor i32 %b, -1 932c4d0509eSFilipp Zhinkin %and = and i32 %a, %not 933c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 934c4d0509eSFilipp Zhinkin ret i1 %res 935c4d0509eSFilipp Zhinkin} 936c4d0509eSFilipp Zhinkin 937c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_not_ri(i32 %a) { 938c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_not_ri: 939c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 940c4d0509eSFilipp Zhinkin; ARM-NEXT: bic r0, r0, #42 941c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 942c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 943c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 944c4d0509eSFilipp Zhinkin; 945c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_not_ri: 946c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 947c4d0509eSFilipp Zhinkin; THUMB-NEXT: movs r1, #42 948c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 949c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 950c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 951c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 952c4d0509eSFilipp Zhinkin; 953c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_not_ri: 954c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 955c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bic r0, r0, #42 956c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 957c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 958c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 959c4d0509eSFilipp Zhinkin %not = xor i32 42, -1 960c4d0509eSFilipp Zhinkin %and = and i32 %a, %not 961c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 962c4d0509eSFilipp Zhinkin ret i1 %res 963c4d0509eSFilipp Zhinkin} 964c4d0509eSFilipp Zhinkin 965c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_not_rsr(i32 %a, i32 %b, i32 %c) { 966c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_not_rsr: 967c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 968c4d0509eSFilipp Zhinkin; ARM-NEXT: bic r0, r0, r1, lsl r2 969c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 970c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 971c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 972c4d0509eSFilipp Zhinkin; 973c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_not_rsr: 974c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 975c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r2 976c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 977c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 978c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 979c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 980c4d0509eSFilipp Zhinkin; 981c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_not_rsr: 982c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 983c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r1, r2 984c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bics r0, r1 985c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 986c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 987c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 988c4d0509eSFilipp Zhinkin %sh = shl i32 %b, %c 989c4d0509eSFilipp Zhinkin %not = xor i32 %sh, -1 990c4d0509eSFilipp Zhinkin %and = and i32 %not, %a 991c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 992c4d0509eSFilipp Zhinkin ret i1 %res 993c4d0509eSFilipp Zhinkin} 994c4d0509eSFilipp Zhinkin 995c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_and_not_rsi(i32 %a, i32 %b) { 996c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_and_not_rsi: 997c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 998c4d0509eSFilipp Zhinkin; ARM-NEXT: bic r0, r0, r1, lsr #17 999c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1000c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1001c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1002c4d0509eSFilipp Zhinkin; 1003c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_and_not_rsi: 1004c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1005c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r1, #17 1006c4d0509eSFilipp Zhinkin; THUMB-NEXT: bics r0, r1 1007c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 1008c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1009c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1010c4d0509eSFilipp Zhinkin; 1011c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_and_not_rsi: 1012c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1013c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bic.w r0, r0, r1, lsr #17 1014c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1015c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1016c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1017c4d0509eSFilipp Zhinkin %sh = lshr i32 %b, 17 1018c4d0509eSFilipp Zhinkin %not = xor i32 %sh, -1 1019c4d0509eSFilipp Zhinkin %and = and i32 %not, %a 1020c4d0509eSFilipp Zhinkin %res = icmp eq i32 %and, 0 1021c4d0509eSFilipp Zhinkin ret i1 %res 1022c4d0509eSFilipp Zhinkin} 1023c4d0509eSFilipp Zhinkin 1024c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_shl_rr(i32 %a, i32 %b) { 1025c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_shl_rr: 1026c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1027c4d0509eSFilipp Zhinkin; ARM-NEXT: lsl r0, r0, r1 1028c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1029c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1030c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1031c4d0509eSFilipp Zhinkin; 1032c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_shl_rr: 1033c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1034c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r0, r1 1035c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 1036c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1037c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1038c4d0509eSFilipp Zhinkin; 1039c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_shl_rr: 1040c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1041c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r0, r1 1042c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1043c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1044c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1045c4d0509eSFilipp Zhinkin %sh = shl i32 %a, %b 1046c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1047c4d0509eSFilipp Zhinkin ret i1 %cmp 1048c4d0509eSFilipp Zhinkin} 1049c4d0509eSFilipp Zhinkin 1050c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_shl_ri(i32 %a) { 1051c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_shl_ri: 1052c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1053c4d0509eSFilipp Zhinkin; ARM-NEXT: lsl r0, r0, #7 1054c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1055c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1056c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1057c4d0509eSFilipp Zhinkin; 1058c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_shl_ri: 1059c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1060c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsls r1, r0, #7 1061c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r0, r1, #0 1062c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1063c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1064c4d0509eSFilipp Zhinkin; 1065c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_shl_ri: 1066c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1067c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsls r0, r0, #7 1068c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1069c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1070c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1071c4d0509eSFilipp Zhinkin %sh = shl i32 %a, 7 1072c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1073c4d0509eSFilipp Zhinkin ret i1 %cmp 1074c4d0509eSFilipp Zhinkin} 1075c4d0509eSFilipp Zhinkin 1076c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_lshr_rr(i32 %a, i32 %b) { 1077c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_lshr_rr: 1078c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1079c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, r1 1080c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1081c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1082c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1083c4d0509eSFilipp Zhinkin; 1084c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_lshr_rr: 1085c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1086c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r0, r1 1087c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 1088c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1089c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1090c4d0509eSFilipp Zhinkin; 1091c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_lshr_rr: 1092c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1093c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r1 1094c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1095c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1096c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1097c4d0509eSFilipp Zhinkin %sh = lshr i32 %a, %b 1098c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1099c4d0509eSFilipp Zhinkin ret i1 %cmp 1100c4d0509eSFilipp Zhinkin} 1101c4d0509eSFilipp Zhinkin 1102c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_lshr_ri(i32 %a) { 1103c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_lshr_ri: 1104c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1105c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #7 1106c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1107c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1108c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1109c4d0509eSFilipp Zhinkin; 1110c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_lshr_ri: 1111c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1112c4d0509eSFilipp Zhinkin; THUMB-NEXT: lsrs r1, r0, #7 1113c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r0, r1, #0 1114c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1115c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1116c4d0509eSFilipp Zhinkin; 1117c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_lshr_ri: 1118c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1119c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #7 1120c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1121c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1122c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1123c4d0509eSFilipp Zhinkin %sh = lshr i32 %a, 7 1124c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1125c4d0509eSFilipp Zhinkin ret i1 %cmp 1126c4d0509eSFilipp Zhinkin} 1127c4d0509eSFilipp Zhinkin 1128c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_ashr_rr(i32 %a, i32 %b) { 1129c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_ashr_rr: 1130c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1131c4d0509eSFilipp Zhinkin; ARM-NEXT: asr r0, r0, r1 1132c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1133c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1134c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1135c4d0509eSFilipp Zhinkin; 1136c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_ashr_rr: 1137c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1138c4d0509eSFilipp Zhinkin; THUMB-NEXT: asrs r0, r1 1139c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r1, r0, #0 1140c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1141c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1142c4d0509eSFilipp Zhinkin; 1143c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_ashr_rr: 1144c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1145c4d0509eSFilipp Zhinkin; THUMB2-NEXT: asrs r0, r1 1146c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1147c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1148c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1149c4d0509eSFilipp Zhinkin %sh = ashr i32 %a, %b 1150c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1151c4d0509eSFilipp Zhinkin ret i1 %cmp 1152c4d0509eSFilipp Zhinkin} 1153c4d0509eSFilipp Zhinkin 1154c4d0509eSFilipp Zhinkindefine i1 @cmp_eq_zero_ashr_ri(i32 %a) { 1155c4d0509eSFilipp Zhinkin; ARM-LABEL: cmp_eq_zero_ashr_ri: 1156c4d0509eSFilipp Zhinkin; ARM: @ %bb.0: 1157c4d0509eSFilipp Zhinkin; ARM-NEXT: asr r0, r0, #7 1158c4d0509eSFilipp Zhinkin; ARM-NEXT: clz r0, r0 1159c4d0509eSFilipp Zhinkin; ARM-NEXT: lsr r0, r0, #5 1160c4d0509eSFilipp Zhinkin; ARM-NEXT: bx lr 1161c4d0509eSFilipp Zhinkin; 1162c4d0509eSFilipp Zhinkin; THUMB-LABEL: cmp_eq_zero_ashr_ri: 1163c4d0509eSFilipp Zhinkin; THUMB: @ %bb.0: 1164c4d0509eSFilipp Zhinkin; THUMB-NEXT: asrs r1, r0, #7 1165c4d0509eSFilipp Zhinkin; THUMB-NEXT: rsbs r0, r1, #0 1166c4d0509eSFilipp Zhinkin; THUMB-NEXT: adcs r0, r1 1167c4d0509eSFilipp Zhinkin; THUMB-NEXT: bx lr 1168c4d0509eSFilipp Zhinkin; 1169c4d0509eSFilipp Zhinkin; THUMB2-LABEL: cmp_eq_zero_ashr_ri: 1170c4d0509eSFilipp Zhinkin; THUMB2: @ %bb.0: 1171c4d0509eSFilipp Zhinkin; THUMB2-NEXT: asrs r0, r0, #7 1172c4d0509eSFilipp Zhinkin; THUMB2-NEXT: clz r0, r0 1173c4d0509eSFilipp Zhinkin; THUMB2-NEXT: lsrs r0, r0, #5 1174c4d0509eSFilipp Zhinkin; THUMB2-NEXT: bx lr 1175c4d0509eSFilipp Zhinkin %sh = ashr i32 %a, 7 1176c4d0509eSFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1177c4d0509eSFilipp Zhinkin ret i1 %cmp 1178c4d0509eSFilipp Zhinkin} 1179fa67e281SFilipp Zhinkin 1180fa67e281SFilipp Zhinkindeclare void @consume(i32 %0); 1181fa67e281SFilipp Zhinkin 1182fa67e281SFilipp Zhinkindefine void @br_on_binop_eq_zero(i32 %a, i32 %b) { 1183fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_eq_zero: 1184fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1185fa67e281SFilipp Zhinkin; ARM-NEXT: orrs r1, r0, r1 1186fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1187fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB44_1: @ %true_br 1188fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1189fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1190fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1191fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1192fa67e281SFilipp Zhinkin; 1193fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_eq_zero: 1194fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1195fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1196fa67e281SFilipp Zhinkin; THUMB-NEXT: orrs r1, r0 1197fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB44_2 1198fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %exit 1199fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1200fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB44_2: @ %true_br 1201fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1202fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1203fa67e281SFilipp Zhinkin; 1204fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_eq_zero: 1205fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1206fa67e281SFilipp Zhinkin; THUMB2-NEXT: orrs r1, r0 1207fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1208fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1209fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB44_1: @ %true_br 1210fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1211fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1212fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1213fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1214fa67e281SFilipp Zhinkin %or = or i32 %a, %b 1215fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %or, 0 1216fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1217fa67e281SFilipp Zhinkintrue_br: 1218fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1219fa67e281SFilipp Zhinkin br label %exit 1220fa67e281SFilipp Zhinkinexit: 1221fa67e281SFilipp Zhinkin ret void 1222fa67e281SFilipp Zhinkin} 1223fa67e281SFilipp Zhinkin 1224fa67e281SFilipp Zhinkindefine void @br_on_binop_ne_zero(i32 %a, i32 %b) { 1225fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_ne_zero: 1226fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1227fa67e281SFilipp Zhinkin; ARM-NEXT: orrs r1, r0, r1 1228fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1229fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB45_1: @ %true_br 1230fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1231fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1232fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1233fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1234fa67e281SFilipp Zhinkin; 1235fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_ne_zero: 1236fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1237fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1238fa67e281SFilipp Zhinkin; THUMB-NEXT: orrs r1, r0 1239fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB45_2 1240fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1241fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1242fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB45_2: @ %exit 1243fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1244fa67e281SFilipp Zhinkin; 1245fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_ne_zero: 1246fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1247fa67e281SFilipp Zhinkin; THUMB2-NEXT: orrs r1, r0 1248fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1249fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1250fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB45_1: @ %true_br 1251fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1252fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1253fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1254fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1255fa67e281SFilipp Zhinkin %or = or i32 %a, %b 1256fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %or, 0 1257fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1258fa67e281SFilipp Zhinkintrue_br: 1259fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1260fa67e281SFilipp Zhinkin br label %exit 1261fa67e281SFilipp Zhinkinexit: 1262fa67e281SFilipp Zhinkin ret void 1263fa67e281SFilipp Zhinkin} 1264fa67e281SFilipp Zhinkin 1265fa67e281SFilipp Zhinkindefine void @br_on_binop_lt_zero(i32 %a, i32 %b) { 1266fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_lt_zero: 1267fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1268fa67e281SFilipp Zhinkin; ARM-NEXT: orr r1, r0, r1 1269fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, #0 1270fa67e281SFilipp Zhinkin; ARM-NEXT: bxhs lr 1271fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB46_1: @ %true_br 1272fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1273fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1274fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1275fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1276fa67e281SFilipp Zhinkin; 1277fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_lt_zero: 1278fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1279fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1280fa67e281SFilipp Zhinkin; THUMB-NEXT: orrs r1, r0 1281fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r1, #0 1282fa67e281SFilipp Zhinkin; THUMB-NEXT: bhs .LBB46_2 1283fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1284fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1285fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB46_2: @ %exit 1286fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1287fa67e281SFilipp Zhinkin; 1288fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_lt_zero: 1289fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1290fa67e281SFilipp Zhinkin; THUMB2-NEXT: orrs r1, r0 1291fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #0 1292fa67e281SFilipp Zhinkin; THUMB2-NEXT: it hs 1293fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxhs lr 1294fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB46_1: @ %true_br 1295fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1296fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1297fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1298fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1299fa67e281SFilipp Zhinkin %or = or i32 %a, %b 1300fa67e281SFilipp Zhinkin %cmp = icmp ult i32 %or, 0 1301fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1302fa67e281SFilipp Zhinkintrue_br: 1303fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1304fa67e281SFilipp Zhinkin br label %exit 1305fa67e281SFilipp Zhinkinexit: 1306fa67e281SFilipp Zhinkin ret void 1307fa67e281SFilipp Zhinkin} 1308fa67e281SFilipp Zhinkin 1309fa67e281SFilipp Zhinkindefine void @br_on_binop_eq_imm(i32 %a, i32 %b) { 1310fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_eq_imm: 1311fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1312fa67e281SFilipp Zhinkin; ARM-NEXT: orr r1, r0, r1 1313fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, #42 1314fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1315fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB47_1: @ %true_br 1316fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1317fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1318fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1319fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1320fa67e281SFilipp Zhinkin; 1321fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_eq_imm: 1322fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1323fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1324fa67e281SFilipp Zhinkin; THUMB-NEXT: orrs r1, r0 1325fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r1, #42 1326fa67e281SFilipp Zhinkin; THUMB-NEXT: bne .LBB47_2 1327fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1328fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1329fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB47_2: @ %exit 1330fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1331fa67e281SFilipp Zhinkin; 1332fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_eq_imm: 1333fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1334fa67e281SFilipp Zhinkin; THUMB2-NEXT: orrs r1, r0 1335fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #42 1336fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1337fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1338fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB47_1: @ %true_br 1339fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1340fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1341fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1342fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1343fa67e281SFilipp Zhinkin %or = or i32 %a, %b 1344fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %or, 42 1345fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1346fa67e281SFilipp Zhinkintrue_br: 1347fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1348fa67e281SFilipp Zhinkin br label %exit 1349fa67e281SFilipp Zhinkinexit: 1350fa67e281SFilipp Zhinkin ret void 1351fa67e281SFilipp Zhinkin} 1352fa67e281SFilipp Zhinkin 1353fa67e281SFilipp Zhinkindefine void @br_on_binop_ne_imm(i32 %a, i32 %b) { 1354fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_ne_imm: 1355fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1356fa67e281SFilipp Zhinkin; ARM-NEXT: orr r1, r0, r1 1357fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, #42 1358fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1359fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB48_1: @ %true_br 1360fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1361fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1362fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1363fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1364fa67e281SFilipp Zhinkin; 1365fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_ne_imm: 1366fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1367fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1368fa67e281SFilipp Zhinkin; THUMB-NEXT: orrs r1, r0 1369fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r1, #42 1370fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB48_2 1371fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1372fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1373fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB48_2: @ %exit 1374fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1375fa67e281SFilipp Zhinkin; 1376fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_ne_imm: 1377fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1378fa67e281SFilipp Zhinkin; THUMB2-NEXT: orrs r1, r0 1379fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #42 1380fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1381fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1382fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB48_1: @ %true_br 1383fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1384fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1385fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1386fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1387fa67e281SFilipp Zhinkin %or = or i32 %a, %b 1388fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %or, 42 1389fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1390fa67e281SFilipp Zhinkintrue_br: 1391fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1392fa67e281SFilipp Zhinkin br label %exit 1393fa67e281SFilipp Zhinkinexit: 1394fa67e281SFilipp Zhinkin ret void 1395fa67e281SFilipp Zhinkin} 1396fa67e281SFilipp Zhinkin 1397fa67e281SFilipp Zhinkindefine void @br_on_binop_eq_reg(i32 %a, i32 %b, i32 %c) { 1398fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_eq_reg: 1399fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1400fa67e281SFilipp Zhinkin; ARM-NEXT: eor r1, r0, r1 1401fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, r2 1402fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1403fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB49_1: @ %true_br 1404fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1405fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1406fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1407fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1408fa67e281SFilipp Zhinkin; 1409fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_eq_reg: 1410fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1411fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1412fa67e281SFilipp Zhinkin; THUMB-NEXT: eors r1, r0 1413fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r1, r2 1414fa67e281SFilipp Zhinkin; THUMB-NEXT: bne .LBB49_2 1415fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1416fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1417fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB49_2: @ %exit 1418fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1419fa67e281SFilipp Zhinkin; 1420fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_eq_reg: 1421fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1422fa67e281SFilipp Zhinkin; THUMB2-NEXT: eors r1, r0 1423fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, r2 1424fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1425fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1426fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB49_1: @ %true_br 1427fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1428fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1429fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1430fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1431fa67e281SFilipp Zhinkin %xor = xor i32 %a, %b 1432fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %xor, %c 1433fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1434fa67e281SFilipp Zhinkintrue_br: 1435fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1436fa67e281SFilipp Zhinkin br label %exit 1437fa67e281SFilipp Zhinkinexit: 1438fa67e281SFilipp Zhinkin ret void 1439fa67e281SFilipp Zhinkin} 1440fa67e281SFilipp Zhinkin 1441fa67e281SFilipp Zhinkindefine void @br_on_binop_ne_reg(i32 %a, i32 %b, i32 %c) { 1442fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_binop_ne_reg: 1443fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1444fa67e281SFilipp Zhinkin; ARM-NEXT: and r1, r0, r1 1445fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, r2 1446fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1447fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB50_1: @ %true_br 1448fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1449fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1450fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1451fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1452fa67e281SFilipp Zhinkin; 1453fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_binop_ne_reg: 1454fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1455fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1456fa67e281SFilipp Zhinkin; THUMB-NEXT: ands r1, r0 1457fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r1, r2 1458fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB50_2 1459fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1460fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1461fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB50_2: @ %exit 1462fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1463fa67e281SFilipp Zhinkin; 1464fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_binop_ne_reg: 1465fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1466fa67e281SFilipp Zhinkin; THUMB2-NEXT: ands r1, r0 1467fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, r2 1468fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1469fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1470fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB50_1: @ %true_br 1471fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1472fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1473fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1474fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1475fa67e281SFilipp Zhinkin %and = and i32 %a, %b 1476fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %and, %c 1477fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1478fa67e281SFilipp Zhinkintrue_br: 1479fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1480fa67e281SFilipp Zhinkin br label %exit 1481fa67e281SFilipp Zhinkinexit: 1482fa67e281SFilipp Zhinkin ret void 1483fa67e281SFilipp Zhinkin} 1484fa67e281SFilipp Zhinkin 1485fa67e281SFilipp Zhinkindefine void @br_on_shift_eq_zero(i32 %a, i32 %b) { 1486fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_eq_zero: 1487fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1488*945a1468SFilipp Zhinkin; ARM-NEXT: lsls r1, r0, r1 1489fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1490fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB51_1: @ %true_br 1491fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1492fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1493fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1494fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1495fa67e281SFilipp Zhinkin; 1496fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_eq_zero: 1497fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1498fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1499fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r2, r0 1500fa67e281SFilipp Zhinkin; THUMB-NEXT: lsls r2, r1 1501fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB51_2 1502fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %exit 1503fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1504fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB51_2: @ %true_br 1505fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1506fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1507fa67e281SFilipp Zhinkin; 1508fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_eq_zero: 1509fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1510fa67e281SFilipp Zhinkin; THUMB2-NEXT: lsls.w r1, r0, r1 1511fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1512fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1513fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB51_1: @ %true_br 1514fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1515fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1516fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1517fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1518fa67e281SFilipp Zhinkin %sh = shl i32 %a, %b 1519fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %sh, 0 1520fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1521fa67e281SFilipp Zhinkintrue_br: 1522fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1523fa67e281SFilipp Zhinkin br label %exit 1524fa67e281SFilipp Zhinkinexit: 1525fa67e281SFilipp Zhinkin ret void 1526fa67e281SFilipp Zhinkin} 1527fa67e281SFilipp Zhinkin 1528fa67e281SFilipp Zhinkindefine void @br_on_shift_ne_zero(i32 %a, i32 %b) { 1529fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_ne_zero: 1530fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1531*945a1468SFilipp Zhinkin; ARM-NEXT: lsrs r1, r0, r1 1532fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1533fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB52_1: @ %true_br 1534fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1535fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1536fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1537fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1538fa67e281SFilipp Zhinkin; 1539fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_ne_zero: 1540fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1541fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1542fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r2, r0 1543fa67e281SFilipp Zhinkin; THUMB-NEXT: lsrs r2, r1 1544fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB52_2 1545fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1546fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1547fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB52_2: @ %exit 1548fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1549fa67e281SFilipp Zhinkin; 1550fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_ne_zero: 1551fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1552fa67e281SFilipp Zhinkin; THUMB2-NEXT: lsrs.w r1, r0, r1 1553fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1554fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1555fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB52_1: @ %true_br 1556fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1557fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1558fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1559fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1560fa67e281SFilipp Zhinkin %sh = lshr i32 %a, %b 1561fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %sh, 0 1562fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1563fa67e281SFilipp Zhinkintrue_br: 1564fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1565fa67e281SFilipp Zhinkin br label %exit 1566fa67e281SFilipp Zhinkinexit: 1567fa67e281SFilipp Zhinkin ret void 1568fa67e281SFilipp Zhinkin} 1569fa67e281SFilipp Zhinkin 1570fa67e281SFilipp Zhinkindefine void @br_on_shift_lt_zero(i32 %a, i32 %b) { 1571fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_lt_zero: 1572fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1573fa67e281SFilipp Zhinkin; ARM-NEXT: asr r1, r0, r1 1574fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r1, #0 1575fa67e281SFilipp Zhinkin; ARM-NEXT: bxhs lr 1576fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB53_1: @ %true_br 1577fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1578fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1579fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1580fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1581fa67e281SFilipp Zhinkin; 1582fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_lt_zero: 1583fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1584fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1585fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r2, r0 1586fa67e281SFilipp Zhinkin; THUMB-NEXT: asrs r2, r1 1587fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r2, #0 1588fa67e281SFilipp Zhinkin; THUMB-NEXT: bhs .LBB53_2 1589fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1590fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1591fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB53_2: @ %exit 1592fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1593fa67e281SFilipp Zhinkin; 1594fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_lt_zero: 1595fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1596fa67e281SFilipp Zhinkin; THUMB2-NEXT: asr.w r1, r0, r1 1597fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #0 1598fa67e281SFilipp Zhinkin; THUMB2-NEXT: it hs 1599fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxhs lr 1600fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB53_1: @ %true_br 1601fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1602fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1603fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1604fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1605fa67e281SFilipp Zhinkin %sh = ashr i32 %a, %b 1606fa67e281SFilipp Zhinkin %cmp = icmp ult i32 %sh, 0 1607fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1608fa67e281SFilipp Zhinkintrue_br: 1609fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1610fa67e281SFilipp Zhinkin br label %exit 1611fa67e281SFilipp Zhinkinexit: 1612fa67e281SFilipp Zhinkin ret void 1613fa67e281SFilipp Zhinkin} 1614fa67e281SFilipp Zhinkin 1615fa67e281SFilipp Zhinkindefine void @br_on_shift_eq_imm(i32 %a, i32 %b) { 1616fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_eq_imm: 1617fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1618fa67e281SFilipp Zhinkin; ARM-NEXT: mov r2, #42 1619fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r2, r0, lsl r1 1620fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1621fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB54_1: @ %true_br 1622fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1623fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1624fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1625fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1626fa67e281SFilipp Zhinkin; 1627fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_eq_imm: 1628fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1629fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1630fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r2, r0 1631fa67e281SFilipp Zhinkin; THUMB-NEXT: lsls r2, r1 1632fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r2, #42 1633fa67e281SFilipp Zhinkin; THUMB-NEXT: bne .LBB54_2 1634fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1635fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1636fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB54_2: @ %exit 1637fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1638fa67e281SFilipp Zhinkin; 1639fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_eq_imm: 1640fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1641fa67e281SFilipp Zhinkin; THUMB2-NEXT: lsl.w r1, r0, r1 1642fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #42 1643fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1644fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1645fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB54_1: @ %true_br 1646fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1647fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1648fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1649fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1650fa67e281SFilipp Zhinkin %sh = shl i32 %a, %b 1651fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %sh, 42 1652fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1653fa67e281SFilipp Zhinkintrue_br: 1654fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1655fa67e281SFilipp Zhinkin br label %exit 1656fa67e281SFilipp Zhinkinexit: 1657fa67e281SFilipp Zhinkin ret void 1658fa67e281SFilipp Zhinkin} 1659fa67e281SFilipp Zhinkin 1660fa67e281SFilipp Zhinkindefine void @br_on_shift_ne_imm(i32 %a, i32 %b) { 1661fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_ne_imm: 1662fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1663fa67e281SFilipp Zhinkin; ARM-NEXT: mov r2, #42 1664fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r2, r0, lsr r1 1665fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1666fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB55_1: @ %true_br 1667fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1668fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1669fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1670fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1671fa67e281SFilipp Zhinkin; 1672fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_ne_imm: 1673fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1674fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1675fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r2, r0 1676fa67e281SFilipp Zhinkin; THUMB-NEXT: lsrs r2, r1 1677fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r2, #42 1678fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB55_2 1679fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1680fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1681fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB55_2: @ %exit 1682fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1683fa67e281SFilipp Zhinkin; 1684fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_ne_imm: 1685fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1686fa67e281SFilipp Zhinkin; THUMB2-NEXT: lsr.w r1, r0, r1 1687fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r1, #42 1688fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1689fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1690fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB55_1: @ %true_br 1691fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1692fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1693fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1694fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1695fa67e281SFilipp Zhinkin %sh = lshr i32 %a, %b 1696fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %sh, 42 1697fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1698fa67e281SFilipp Zhinkintrue_br: 1699fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1700fa67e281SFilipp Zhinkin br label %exit 1701fa67e281SFilipp Zhinkinexit: 1702fa67e281SFilipp Zhinkin ret void 1703fa67e281SFilipp Zhinkin} 1704fa67e281SFilipp Zhinkin 1705fa67e281SFilipp Zhinkindefine void @br_on_shift_eq_reg(i32 %a, i32 %b, i32 %c) { 1706fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_eq_reg: 1707fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1708fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r2, r0, asr r1 1709fa67e281SFilipp Zhinkin; ARM-NEXT: bxne lr 1710fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB56_1: @ %true_br 1711fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1712fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1713fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1714fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1715fa67e281SFilipp Zhinkin; 1716fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_eq_reg: 1717fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1718fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1719fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r3, r0 1720fa67e281SFilipp Zhinkin; THUMB-NEXT: asrs r3, r1 1721fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r2, r3 1722fa67e281SFilipp Zhinkin; THUMB-NEXT: bne .LBB56_2 1723fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1724fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1725fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB56_2: @ %exit 1726fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1727fa67e281SFilipp Zhinkin; 1728fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_eq_reg: 1729fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1730fa67e281SFilipp Zhinkin; THUMB2-NEXT: asr.w r1, r0, r1 1731fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r2, r1 1732fa67e281SFilipp Zhinkin; THUMB2-NEXT: it ne 1733fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxne lr 1734fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB56_1: @ %true_br 1735fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1736fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1737fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1738fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1739fa67e281SFilipp Zhinkin %sh = ashr i32 %a, %b 1740fa67e281SFilipp Zhinkin %cmp = icmp eq i32 %sh, %c 1741fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1742fa67e281SFilipp Zhinkintrue_br: 1743fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1744fa67e281SFilipp Zhinkin br label %exit 1745fa67e281SFilipp Zhinkinexit: 1746fa67e281SFilipp Zhinkin ret void 1747fa67e281SFilipp Zhinkin} 1748fa67e281SFilipp Zhinkin 1749fa67e281SFilipp Zhinkindefine void @br_on_shift_ne_reg(i32 %a, i32 %b, i32 %c) { 1750fa67e281SFilipp Zhinkin; ARM-LABEL: br_on_shift_ne_reg: 1751fa67e281SFilipp Zhinkin; ARM: @ %bb.0: 1752fa67e281SFilipp Zhinkin; ARM-NEXT: cmp r2, r0, lsl r1 1753fa67e281SFilipp Zhinkin; ARM-NEXT: bxeq lr 1754fa67e281SFilipp Zhinkin; ARM-NEXT: .LBB57_1: @ %true_br 1755fa67e281SFilipp Zhinkin; ARM-NEXT: push {r11, lr} 1756fa67e281SFilipp Zhinkin; ARM-NEXT: bl consume 1757fa67e281SFilipp Zhinkin; ARM-NEXT: pop {r11, lr} 1758fa67e281SFilipp Zhinkin; ARM-NEXT: bx lr 1759fa67e281SFilipp Zhinkin; 1760fa67e281SFilipp Zhinkin; THUMB-LABEL: br_on_shift_ne_reg: 1761fa67e281SFilipp Zhinkin; THUMB: @ %bb.0: 1762fa67e281SFilipp Zhinkin; THUMB-NEXT: push {r7, lr} 1763fa67e281SFilipp Zhinkin; THUMB-NEXT: mov r3, r0 1764fa67e281SFilipp Zhinkin; THUMB-NEXT: lsls r3, r1 1765fa67e281SFilipp Zhinkin; THUMB-NEXT: cmp r2, r3 1766fa67e281SFilipp Zhinkin; THUMB-NEXT: beq .LBB57_2 1767fa67e281SFilipp Zhinkin; THUMB-NEXT: @ %bb.1: @ %true_br 1768fa67e281SFilipp Zhinkin; THUMB-NEXT: bl consume 1769fa67e281SFilipp Zhinkin; THUMB-NEXT: .LBB57_2: @ %exit 1770fa67e281SFilipp Zhinkin; THUMB-NEXT: pop {r7, pc} 1771fa67e281SFilipp Zhinkin; 1772fa67e281SFilipp Zhinkin; THUMB2-LABEL: br_on_shift_ne_reg: 1773fa67e281SFilipp Zhinkin; THUMB2: @ %bb.0: 1774fa67e281SFilipp Zhinkin; THUMB2-NEXT: lsl.w r1, r0, r1 1775fa67e281SFilipp Zhinkin; THUMB2-NEXT: cmp r2, r1 1776fa67e281SFilipp Zhinkin; THUMB2-NEXT: it eq 1777fa67e281SFilipp Zhinkin; THUMB2-NEXT: bxeq lr 1778fa67e281SFilipp Zhinkin; THUMB2-NEXT: .LBB57_1: @ %true_br 1779fa67e281SFilipp Zhinkin; THUMB2-NEXT: push {r7, lr} 1780fa67e281SFilipp Zhinkin; THUMB2-NEXT: bl consume 1781fa67e281SFilipp Zhinkin; THUMB2-NEXT: pop.w {r7, lr} 1782fa67e281SFilipp Zhinkin; THUMB2-NEXT: bx lr 1783fa67e281SFilipp Zhinkin %sh = shl i32 %a, %b 1784fa67e281SFilipp Zhinkin %cmp = icmp ne i32 %sh, %c 1785fa67e281SFilipp Zhinkin br i1 %cmp, label %true_br, label %exit 1786fa67e281SFilipp Zhinkintrue_br: 1787fa67e281SFilipp Zhinkin call void @consume(i32 %a) 1788fa67e281SFilipp Zhinkin br label %exit 1789fa67e281SFilipp Zhinkinexit: 1790fa67e281SFilipp Zhinkin ret void 1791fa67e281SFilipp Zhinkin} 1792