1; RUN: llc -mtriple=arm64-eabi -mattr=+crc -o - %s | FileCheck %s 2; RUN: llc -mtriple=arm64-eabi -mattr=+v8r -o - %s | FileCheck %s 3; RUN: llc -mtriple=arm64-eabi -mcpu=cortex-a53 -mattr=+crc -o - %s | FileCheck %s 4 5define i32 @test_crc32b(i32 %cur, i8 %next) { 6; CHECK-LABEL: test_crc32b: 7; CHECK: crc32b w0, w0, w1 8 %bits = zext i8 %next to i32 9 %val = call i32 @llvm.aarch64.crc32b(i32 %cur, i32 %bits) 10 ret i32 %val 11} 12 13define i32 @test_crc32h(i32 %cur, i16 %next) { 14; CHECK-LABEL: test_crc32h: 15; CHECK: crc32h w0, w0, w1 16 %bits = zext i16 %next to i32 17 %val = call i32 @llvm.aarch64.crc32h(i32 %cur, i32 %bits) 18 ret i32 %val 19} 20 21define i32 @test_crc32w(i32 %cur, i32 %next) { 22; CHECK-LABEL: test_crc32w: 23; CHECK: crc32w w0, w0, w1 24 %val = call i32 @llvm.aarch64.crc32w(i32 %cur, i32 %next) 25 ret i32 %val 26} 27 28define i32 @test_crc32x(i32 %cur, i64 %next) { 29; CHECK-LABEL: test_crc32x: 30; CHECK: crc32x w0, w0, x1 31 %val = call i32 @llvm.aarch64.crc32x(i32 %cur, i64 %next) 32 ret i32 %val 33} 34 35define i32 @test_crc32cb(i32 %cur, i8 %next) { 36; CHECK-LABEL: test_crc32cb: 37; CHECK: crc32cb w0, w0, w1 38 %bits = zext i8 %next to i32 39 %val = call i32 @llvm.aarch64.crc32cb(i32 %cur, i32 %bits) 40 ret i32 %val 41} 42 43define i32 @test_crc32ch(i32 %cur, i16 %next) { 44; CHECK-LABEL: test_crc32ch: 45; CHECK: crc32ch w0, w0, w1 46 %bits = zext i16 %next to i32 47 %val = call i32 @llvm.aarch64.crc32ch(i32 %cur, i32 %bits) 48 ret i32 %val 49} 50 51define i32 @test_crc32cw(i32 %cur, i32 %next) { 52; CHECK-LABEL: test_crc32cw: 53; CHECK: crc32cw w0, w0, w1 54 %val = call i32 @llvm.aarch64.crc32cw(i32 %cur, i32 %next) 55 ret i32 %val 56} 57 58define i32 @test_crc32cx(i32 %cur, i64 %next) { 59; CHECK-LABEL: test_crc32cx: 60; CHECK: crc32cx w0, w0, x1 61 %val = call i32 @llvm.aarch64.crc32cx(i32 %cur, i64 %next) 62 ret i32 %val 63} 64 65declare i32 @llvm.aarch64.crc32b(i32, i32) 66declare i32 @llvm.aarch64.crc32h(i32, i32) 67declare i32 @llvm.aarch64.crc32w(i32, i32) 68declare i32 @llvm.aarch64.crc32x(i32, i64) 69 70declare i32 @llvm.aarch64.crc32cb(i32, i32) 71declare i32 @llvm.aarch64.crc32ch(i32, i32) 72declare i32 @llvm.aarch64.crc32cw(i32, i32) 73declare i32 @llvm.aarch64.crc32cx(i32, i64) 74