|  | 
| 1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
| 2 |  | -; RUN: llc -mtriple=aarch64-linux-gnu -O3 < %s | FileCheck %s | 
|  | 2 | +; RUN: llc -mtriple=aarch64-linux-gnu -O3 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD | 
|  | 3 | +; RUN: llc -mtriple=aarch64-linux-gnu -O3 -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI | 
| 3 | 4 | 
 | 
| 4 | 5 | ; This used to miscompile: | 
| 5 | 6 | ; The 16-bit -1 should not become 32-bit -1 (sub w8, w8, #1). | 
| 6 | 7 | 
 | 
| 7 | 8 | @g = global i16 0, align 4 | 
| 8 | 9 | define i32 @srl_and()  { | 
| 9 |  | -; CHECK-LABEL: srl_and: | 
| 10 |  | -; CHECK:       // %bb.0: // %entry | 
| 11 |  | -; CHECK-NEXT:    adrp x8, :got:g | 
| 12 |  | -; CHECK-NEXT:    mov w9, #50 | 
| 13 |  | -; CHECK-NEXT:    ldr x8, [x8, :got_lo12:g] | 
| 14 |  | -; CHECK-NEXT:    ldrh w8, [x8] | 
| 15 |  | -; CHECK-NEXT:    eor w8, w8, w9 | 
| 16 |  | -; CHECK-NEXT:    mov w9, #65535 | 
| 17 |  | -; CHECK-NEXT:    add w8, w8, w9 | 
| 18 |  | -; CHECK-NEXT:    and w0, w8, w8, lsr #16 | 
| 19 |  | -; CHECK-NEXT:    ret | 
|  | 10 | +; CHECK-SD-LABEL: srl_and: | 
|  | 11 | +; CHECK-SD:       // %bb.0: // %entry | 
|  | 12 | +; CHECK-SD-NEXT:    adrp x8, :got:g | 
|  | 13 | +; CHECK-SD-NEXT:    mov w9, #50 // =0x32 | 
|  | 14 | +; CHECK-SD-NEXT:    ldr x8, [x8, :got_lo12:g] | 
|  | 15 | +; CHECK-SD-NEXT:    ldrh w8, [x8] | 
|  | 16 | +; CHECK-SD-NEXT:    eor w8, w8, w9 | 
|  | 17 | +; CHECK-SD-NEXT:    mov w9, #65535 // =0xffff | 
|  | 18 | +; CHECK-SD-NEXT:    add w8, w8, w9 | 
|  | 19 | +; CHECK-SD-NEXT:    and w0, w8, w8, lsr #16 | 
|  | 20 | +; CHECK-SD-NEXT:    ret | 
|  | 21 | +; | 
|  | 22 | +; CHECK-GI-LABEL: srl_and: | 
|  | 23 | +; CHECK-GI:       // %bb.0: // %entry | 
|  | 24 | +; CHECK-GI-NEXT:    adrp x8, :got:g | 
|  | 25 | +; CHECK-GI-NEXT:    mov w9, #50 // =0x32 | 
|  | 26 | +; CHECK-GI-NEXT:    ldr x8, [x8, :got_lo12:g] | 
|  | 27 | +; CHECK-GI-NEXT:    ldrh w8, [x8] | 
|  | 28 | +; CHECK-GI-NEXT:    eor w8, w8, w9 | 
|  | 29 | +; CHECK-GI-NEXT:    mov w9, #65535 // =0xffff | 
|  | 30 | +; CHECK-GI-NEXT:    add w8, w9, w8, uxth | 
|  | 31 | +; CHECK-GI-NEXT:    and w9, w8, #0xffff | 
|  | 32 | +; CHECK-GI-NEXT:    cmp w8, w9 | 
|  | 33 | +; CHECK-GI-NEXT:    cset w8, ne | 
|  | 34 | +; CHECK-GI-NEXT:    and w0, w9, w8 | 
|  | 35 | +; CHECK-GI-NEXT:    ret | 
| 20 | 36 | entry: | 
| 21 | 37 |   %0 = load i16, ptr @g, align 4 | 
| 22 | 38 |   %1 = xor i16 %0, 50 | 
|  | 
| 29 | 45 | 
 | 
| 30 | 46 |   ret i32 %and | 
| 31 | 47 | } | 
|  | 48 | +;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: | 
|  | 49 | +; CHECK: {{.*}} | 
0 commit comments