[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / InstCombine / ARM / aes-intrinsics.ll
blob56eee54680101f72e73c96d61318eb5ff1fbd903
1 ; RUN: opt -S -instcombine < %s | FileCheck %s
2 ; ARM AES intrinsic variants
4 define <16 x i8> @combineXorAeseZeroARM(<16 x i8> %data, <16 x i8> %key) {
5 ; CHECK-LABEL: @combineXorAeseZeroARM(
6 ; CHECK-NEXT:    %data.aes = tail call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %data, <16 x i8> %key)
7 ; CHECK-NEXT:    ret <16 x i8> %data.aes
8   %data.xor = xor <16 x i8> %data, %key
9   %data.aes = tail call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %data.xor, <16 x i8> zeroinitializer)
10   ret <16 x i8> %data.aes
13 define <16 x i8> @combineXorAeseNonZeroARM(<16 x i8> %data, <16 x i8> %key) {
14 ; CHECK-LABEL: @combineXorAeseNonZeroARM(
15 ; CHECK-NEXT:    %data.xor = xor <16 x i8> %data, %key
16 ; CHECK-NEXT:    %data.aes = tail call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %data.xor, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
17 ; CHECK-NEXT:    ret <16 x i8> %data.aes
18   %data.xor = xor <16 x i8> %data, %key
19   %data.aes = tail call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %data.xor, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
20   ret <16 x i8> %data.aes
23 define <16 x i8> @combineXorAesdZeroARM(<16 x i8> %data, <16 x i8> %key) {
24 ; CHECK-LABEL: @combineXorAesdZeroARM(
25 ; CHECK-NEXT:    %data.aes = tail call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %data, <16 x i8> %key)
26 ; CHECK-NEXT:    ret <16 x i8> %data.aes
27   %data.xor = xor <16 x i8> %data, %key
28   %data.aes = tail call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %data.xor, <16 x i8> zeroinitializer)
29   ret <16 x i8> %data.aes
32 define <16 x i8> @combineXorAesdNonZeroARM(<16 x i8> %data, <16 x i8> %key) {
33 ; CHECK-LABEL: @combineXorAesdNonZeroARM(
34 ; CHECK-NEXT:    %data.xor = xor <16 x i8> %data, %key
35 ; CHECK-NEXT:    %data.aes = tail call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %data.xor, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
36 ; CHECK-NEXT:    ret <16 x i8> %data.aes
37   %data.xor = xor <16 x i8> %data, %key
38   %data.aes = tail call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %data.xor, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
39   ret <16 x i8> %data.aes
42 declare <16 x i8> @llvm.arm.neon.aese(<16 x i8>, <16 x i8>) #0
43 declare <16 x i8> @llvm.arm.neon.aesd(<16 x i8>, <16 x i8>) #0