[CIR][AArch64] Upstream NEON shift left builtins (#186406)
This PR adds CIR generation for the following AArch64 NEON builtins:
__builtin_neon_vshld_n_s64 and __builtin_neon_vshld_n_u64 (constant
shifts)
extracted the constant value and use it directly for shift left
__builtin_neon_vshld_s64 and __builtin_neon_vshld_u64 (variable shifts)
there is an existing function to handles SISD (SIngle Instruction Single
Data), reusing this to create the right CIR instructions
__builtin_neon_vshld_s64 -- call i64 @llvm.aarch64.neon.sshl.i64(i64
[[A]], i64 [[B]])
__builtin_neon_vshld_u64 -- call i64 @llvm.aarch64.neon.ushl.i64(i64
[[A]], i64 [[B]])
added test cases in intrinsics.c by looking at the test cases present in
https://github.com/llvm/llvm-project/blob/main/clang/test/CodeGen/AArch64/neon-shifts.c
before adding the code it gave a not implemented error and after adding
the code changes the error is not present the code succeeds.
ran the test cases using
```
bin/llvm-lit -v \
/Users/albertbolt/projects/llvm-project/clang/test/CodeGen/AArch64/neon/intrinsics.c
```
#185382
---------
Co-authored-by: Andrzej WarzyĆski <andrzej.warzynski@gmail.com>