1; RUN: opt -S -instcombine < %s | FileCheck %s 2; ARM AES intrinsic variants 3 4define <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 11} 12 13define <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 21} 22 23define <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 30} 31 32define <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 40} 41 42declare <16 x i8> @llvm.arm.neon.aese(<16 x i8>, <16 x i8>) #0 43declare <16 x i8> @llvm.arm.neon.aesd(<16 x i8>, <16 x i8>) #0 44