[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / xor.ll
blobd92402cf43b33ed0bbb5842aac94b681e1d65faa
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s
4 define i32 @PR39657(ptr %p, i64 %x) {
5 ; CHECK-LABEL: PR39657:
6 ; CHECK:       // %bb.0:
7 ; CHECK-NEXT:    mvn x8, x1
8 ; CHECK-NEXT:    ldr w0, [x0, x8, lsl #2]
9 ; CHECK-NEXT:    ret
10   %sh = shl i64 %x, 2
11   %mul = xor i64 %sh, -4
12   %add.ptr = getelementptr inbounds i8, ptr %p, i64 %mul
13   %load = load i32, ptr %add.ptr, align 4
14   ret i32 %load
17 define i32 @add_of_not(i32 %x, i32 %y) {
18 ; CHECK-LABEL: add_of_not:
19 ; CHECK:       // %bb.0:
20 ; CHECK-NEXT:    mvn w8, w1
21 ; CHECK-NEXT:    add w0, w8, w0
22 ; CHECK-NEXT:    ret
23   %t0 = sub i32 %x, %y
24   %r = add i32 %t0, -1
25   ret i32 %r
28 define i32 @add_of_not_decrement(i32 %x, i32 %y) {
29 ; CHECK-LABEL: add_of_not_decrement:
30 ; CHECK:       // %bb.0:
31 ; CHECK-NEXT:    mvn w8, w1
32 ; CHECK-NEXT:    add w0, w8, w0
33 ; CHECK-NEXT:    ret
34   %t0 = sub i32 %x, %y
35   %r = sub i32 %t0, 1
36   ret i32 %r
39 define <4 x i32> @vec_add_of_not(<4 x i32> %x, <4 x i32> %y) {
40 ; CHECK-LABEL: vec_add_of_not:
41 ; CHECK:       // %bb.0:
42 ; CHECK-NEXT:    mvn v1.16b, v1.16b
43 ; CHECK-NEXT:    add v0.4s, v1.4s, v0.4s
44 ; CHECK-NEXT:    ret
45   %t0 = sub <4 x i32> %x, %y
46   %r = add <4 x i32> %t0, <i32 -1, i32 -1, i32 -1, i32 -1>
47   ret <4 x i32> %r
50 define <4 x i32> @vec_add_of_not_decrement(<4 x i32> %x, <4 x i32> %y) {
51 ; CHECK-LABEL: vec_add_of_not_decrement:
52 ; CHECK:       // %bb.0:
53 ; CHECK-NEXT:    mvn v1.16b, v1.16b
54 ; CHECK-NEXT:    add v0.4s, v1.4s, v0.4s
55 ; CHECK-NEXT:    ret
56   %t0 = sub <4 x i32> %x, %y
57   %r = sub <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1>
58   ret <4 x i32> %r
61 define <4 x i32> @vec_add_of_not_with_undef(<4 x i32> %x, <4 x i32> %y) {
62 ; CHECK-LABEL: vec_add_of_not_with_undef:
63 ; CHECK:       // %bb.0:
64 ; CHECK-NEXT:    movi v2.2d, #0xffffffffffffffff
65 ; CHECK-NEXT:    sub v0.4s, v0.4s, v1.4s
66 ; CHECK-NEXT:    add v0.4s, v0.4s, v2.4s
67 ; CHECK-NEXT:    ret
68   %t0 = sub <4 x i32> %x, %y
69   %r = add <4 x i32> %t0, <i32 -1, i32 undef, i32 -1, i32 -1>
70   ret <4 x i32> %r
73 define <4 x i32> @vec_add_of_not_with_undef_decrement(<4 x i32> %x, <4 x i32> %y) {
74 ; CHECK-LABEL: vec_add_of_not_with_undef_decrement:
75 ; CHECK:       // %bb.0:
76 ; CHECK-NEXT:    movi v2.4s, #1
77 ; CHECK-NEXT:    sub v0.4s, v0.4s, v1.4s
78 ; CHECK-NEXT:    add v0.4s, v0.4s, v2.4s
79 ; CHECK-NEXT:    ret
80   %t0 = sub <4 x i32> %x, %y
81   %r = add <4 x i32> %t0, <i32 1, i32 undef, i32 1, i32 1>
82   ret <4 x i32> %r