llvmbot wrote: @llvm/pr-subscribers-backend-x86
<details> <summary>Changes</summary> - Add some additional tests for progagating attributes before inlining; NFC - Regen checks for old test; NFC - Split some tests for c/cpp; NFC - Use "best" ret attribute when propagating attributes during inlining - Also propagate `noundef` and `align` ret attributes during inlining - Propagate callee function memory access attributes before inlining - Propagate callee argument memory access attributes before inlining - Propagate some additional callee argument attributes before inlining - Propagate some callee function attributes to callsites before inlining -- Patch is 373.25 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/66036.diff 45 Files Affected: - (modified) clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c (+9-9) - (modified) clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c (+4-4) - (modified) clang/test/CodeGen/X86/bitscan-builtins.c (-3) - (added) clang/test/CodeGen/X86/bitscan-builtins.cpp (+71) - (modified) clang/test/CodeGen/X86/popcnt-builtins.c (-2) - (added) clang/test/CodeGen/X86/popcnt-builtins.cpp (+67) - (modified) clang/test/CodeGen/X86/rot-intrinsics.c (-7) - (added) clang/test/CodeGen/X86/rot-intrinsics.cpp (+165) - (modified) clang/test/CodeGen/X86/x86-bswap.c (-1) - (added) clang/test/CodeGen/X86/x86-bswap.cpp (+44) - (modified) clang/test/CodeGen/aarch64-ls64.c (+3-3) - (modified) clang/test/CodeGen/aarch64-sme-intrinsics/aarch64-sme-attrs.cpp (+5-5) - (modified) clang/test/CodeGen/fp-contract-fast-pragma.cpp (+1-1) - (modified) clang/test/CodeGen/fp-contract-on-pragma.cpp (+1-1) - (modified) clang/test/CodeGen/fp-contract-pragma.cpp (+1-1) - (modified) clang/test/CodeGenCUDA/cuda-builtin-vars.cu (+12-12) - (modified) clang/test/Headers/__clang_hip_cmath.hip (+10-10) - (modified) clang/test/Headers/__clang_hip_math.hip (+524-524) - (modified) clang/test/Headers/__clang_hip_math_ocml_rounded_ops.hip (+44-44) - (modified) clang/test/Headers/amdgcn_openmp_device_math.c (+12-12) - (modified) clang/test/Headers/amdgcn_openmp_device_math_constexpr.cpp (+12-12) - (modified) clang/test/Headers/hip-header.hip (+5-5) - (modified) clang/test/Headers/nvptx_device_cmath_functions.cpp (+5-5) - (modified) clang/test/Headers/nvptx_device_cmath_functions_cxx17.cpp (+5-5) - (modified) clang/test/Headers/nvptx_device_math_functions.c (+12-7) - (modified) clang/test/Headers/nvptx_device_math_functions.cpp (+5-5) - (modified) clang/test/Headers/nvptx_device_math_functions_cxx17.cpp (+5-5) - (modified) clang/test/Headers/nvptx_device_math_modf.cpp (+4-4) - (modified) clang/test/Headers/nvptx_device_math_sin.cpp (+4-4) - (modified) clang/test/Headers/nvptx_device_math_sin_cos.cpp (+6-6) - (modified) clang/test/Headers/openmp_device_math_isnan.cpp (+4-4) - (modified) clang/test/OpenMP/bug57757.cpp (+1-1) - (modified) llvm/include/llvm/Support/ModRef.h (+7) - (modified) llvm/lib/Transforms/Utils/InlineFunction.cpp (+187) - (added) llvm/test/Transforms/Inline/access-attributes-prop.ll (+498) - (modified) llvm/test/Transforms/Inline/assumptions-from-callsite-attrs.ll (+1-1) - (modified) llvm/test/Transforms/Inline/byval.ll (+122-73) - (modified) llvm/test/Transforms/Inline/memprof_inline.ll (+2-2) - (modified) llvm/test/Transforms/Inline/noalias-calls-always.ll (+6-6) - (modified) llvm/test/Transforms/Inline/noalias-calls.ll (+10-10) - (added) llvm/test/Transforms/Inline/ret_attr_align_and_noundef.ll (+171) - (modified) llvm/test/Transforms/Inline/ret_attr_update.ll (+1-1) - (modified) llvm/test/Transforms/SampleProfile/norepeated-icp-3.ll (+1-1) - (modified) llvm/test/Transforms/SampleProfile/norepeated-icp-4.ll (+1-1) - (modified) llvm/test/Transforms/SampleProfile/uniqname.ll (+3-3) <pre> diff --git a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c index 44f8cbe2cc01739..642b08ac68ef122 100644 --- a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c +++ b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c @@ -636,31 +636,31 @@ void test_core(void) { // CHECK-ASM: vlbb vsc = vec_load_len(cptrsc, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vuc = vec_load_len(cptruc, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vss = vec_load_len(cptrss, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vus = vec_load_len(cptrus, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vsi = vec_load_len(cptrsi, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vui = vec_load_len(cptrui, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vsl = vec_load_len(cptrsl, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vul = vec_load_len(cptrul, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vd = vec_load_len(cptrd, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vec_store_len(vsc, ptrsc, idx); diff --git a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c index 416ca0ddd1b4fe2..3f02565dfb488ce 100644 --- a/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c +++ b/clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c @@ -207,10 +207,10 @@ void test_core(void) { // CHECK-ASM: vlbb vf = vec_load_len(cptrf, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vd = vec_load_len(cptrd, idx); - // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vll(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vll vec_store_len(vf, ptrf, idx); @@ -221,10 +221,10 @@ void test_core(void) { // CHECK-ASM: vstl vuc = vec_load_len_r(cptruc, 0); - // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 0, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 0, ptr readonly %{{.*}}) // CHECK-ASM: vlrl %{{.*}}, 0(%{{.*}}), 0 vuc = vec_load_len_r(cptruc, idx); - // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 %{{.*}}, ptr %{{.*}}) + // CHECK: call <16 x i8> @llvm.s390.vlrl(i32 %{{.*}}, ptr readonly %{{.*}}) // CHECK-ASM: vlrlr vec_store_len_r(vuc, ptruc, 0); diff --git a/clang/test/CodeGen/X86/bitscan-builtins.c b/clang/test/CodeGen/X86/bitscan-builtins.c index a5a7808a82a234d..d75f7c1ab2f1ed4 100644 --- a/clang/test/CodeGen/X86/bitscan-builtins.c +++ b/clang/test/CodeGen/X86/bitscan-builtins.c @@ -1,9 +1,6 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s - // PR33722 // RUN: %clang_cc1 -x c -ffreestanding %s -triple x86_64-unknown-unknown -fms-extensions -fms-compatibility-version=19.00 -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple x86_64-unknown-unknown -fms-extensions -fms-compatibility-version=19.00 -emit-llvm -o - | FileCheck %s #include <x86intrin.h> diff --git a/clang/test/CodeGen/X86/bitscan-builtins.cpp b/clang/test/CodeGen/X86/bitscan-builtins.cpp new file mode 100644 index 000000000000000..ab8a0fa2f24773b --- /dev/null +++ b/clang/test/CodeGen/X86/bitscan-builtins.cpp @@ -0,0 +1,71 @@ +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s + +// PR33722 +// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple x86_64-unknown-unknown -fms-extensions -fms-compatibility-version=19.00 -emit-llvm -o - | FileCheck %s + +#include <x86intrin.h> + +int test_bit_scan_forward(int a) { +// CHECK-LABEL: test_bit_scan_forward +// CHECK: %[[call:.*]] = call noundef i32 @llvm.cttz.i32(i32 %{{.*}}, i1 true) +// CHECK: ret i32 %[[call]] + return _bit_scan_forward(a); +} + +int test_bit_scan_reverse(int a) { +// CHECK-LABEL: test_bit_scan_reverse +// CHECK: %[[call:.*]] = call i32 @llvm.ctlz.i32(i32 %{{.*}}, i1 true) +// CHECK: %[[sub:.*]] = sub nsw i32 31, %[[call]] +// CHECK: ret i32 %[[sub]] + return _bit_scan_reverse(a); +} + +int test__bsfd(int X) { +// CHECK-LABEL: test__bsfd +// CHECK: %[[call:.*]] = call noundef i32 @llvm.cttz.i32(i32 %{{.*}}, i1 true) + return __bsfd(X); +} + +int test__bsfq(long long X) { +// CHECK-LABEL: test__bsfq +// CHECK: %[[call:.*]] = call i64 @llvm.cttz.i64(i64 %{{.*}}, i1 true) + return __bsfq(X); +} + +int test__bsrd(int X) { +// CHECK-LABEL: test__bsrd +// CHECK: %[[call:.*]] = call i32 @llvm.ctlz.i32(i32 %{{.*}}, i1 true) +// CHECK: %[[sub:.*]] = sub nsw i32 31, %[[call]] + return __bsrd(X); +} + +int test__bsrq(long long X) { +// CHECK-LABEL: test__bsrq +// CHECK: %[[call:.*]] = call i64 @llvm.ctlz.i64(i64 %{{.*}}, i1 true) +// CHECK: %[[cast:.*]] = trunc i64 %[[call]] to i32 +// CHECK: %[[sub:.*]] = sub nsw i32 63, %[[cast]] + return __bsrq(X); +} + +// Test constexpr handling. +#if defined(__cplusplus) && (__cplusplus >= 201103L) + +char bsf_0[_bit_scan_forward(0x00000001) == 0 ? 1 : -1]; +char bsf_1[_bit_scan_forward(0x10000000) == 28 ? 1 : -1]; + +char bsr_0[_bit_scan_reverse(0x00000001) == 0 ? 1 : -1]; +char bsr_1[_bit_scan_reverse(0x01000000) == 24 ? 1 : -1]; + +char bsfd_0[__bsfd(0x00000008) == 3 ? 1 : -1]; +char bsfd_1[__bsfd(0x00010008) == 3 ? 1 : -1]; + +char bsrd_0[__bsrd(0x00000010) == 4 ? 1 : -1]; +char bsrd_1[__bsrd(0x00100100) == 20 ? 1 : -1]; + +char bsfq_0[__bsfq(0x0000000800000000ULL) == 35 ? 1 : -1]; +char bsfq_1[__bsfq(0x0004000000000000ULL) == 50 ? 1 : -1]; + +char bsrq_0[__bsrq(0x0000100800000000ULL) == 44 ? 1 : -1]; +char bsrq_1[__bsrq(0x0004000100000000ULL) == 50 ? 1 : -1]; + +#endif diff --git a/clang/test/CodeGen/X86/popcnt-builtins.c b/clang/test/CodeGen/X86/popcnt-builtins.c index e59ffaa031a6a10..b9bc666a1e28ad2 100644 --- a/clang/test/CodeGen/X86/popcnt-builtins.c +++ b/clang/test/CodeGen/X86/popcnt-builtins.c @@ -1,7 +1,5 @@ // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT // RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s #include <x86intrin.h> diff --git a/clang/test/CodeGen/X86/popcnt-builtins.cpp b/clang/test/CodeGen/X86/popcnt-builtins.cpp new file mode 100644 index 000000000000000..42996c547e0af9b --- /dev/null +++ b/clang/test/CodeGen/X86/popcnt-builtins.cpp @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +popcnt -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-POPCNT +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding %s -triple=x86_64-apple-darwin -emit-llvm -o - | FileCheck %s + +#include <x86intrin.h> + +#ifdef __POPCNT__ +int test_mm_popcnt_u32(unsigned int __X) { + //CHECK-POPCNT: call noundef i32 @llvm.ctpop.i32 + return _mm_popcnt_u32(__X); +} +#endif + +int test_popcnt32(unsigned int __X) { + //CHECK: call noundef i32 @llvm.ctpop.i32 + return _popcnt32(__X); +} + +int test__popcntd(unsigned int __X) { + //CHECK: call noundef i32 @llvm.ctpop.i32 + return __popcntd(__X); +} + +#ifdef __x86_64__ +#ifdef __POPCNT__ +long long test_mm_popcnt_u64(unsigned long long __X) { + //CHECK-POPCNT: call i64 @llvm.ctpop.i64 + return _mm_popcnt_u64(__X); +} +#endif + +long long test_popcnt64(unsigned long long __X) { + //CHECK: call i64 @llvm.ctpop.i64 + return _popcnt64(__X); +} + +long long test__popcntq(unsigned long long __X) { + //CHECK: call i64 @llvm.ctpop.i64 + return __popcntq(__X); +} +#endif + +// Test constexpr handling. +#if defined(__cplusplus) && (__cplusplus >= 201103L) +#if defined(__POPCNT__) +char ctpop32_0[_mm_popcnt_u32(0x00000000) == 0 ? 1 : -1]; +char ctpop32_1[_mm_popcnt_u32(0x000000F0) == 4 ? 1 : -1]; +#endif + +char popcnt32_0[_popcnt32(0x00000000) == 0 ? 1 : -1]; +char popcnt32_1[_popcnt32(0x100000F0) == 5 ? 1 : -1]; + +char popcntd_0[__popcntd(0x00000000) == 0 ? 1 : -1]; +char popcntd_1[__popcntd(0x00F000F0) == 8 ? 1 : -1]; + +#ifdef __x86_64__ +#if defined(__POPCNT__) +char ctpop64_0[_mm_popcnt_u64(0x0000000000000000ULL) == 0 ? 1 : -1]; +char ctpop64_1[_mm_popcnt_u64(0xF000000000000001ULL) == 5 ? 1 : -1]; +#endif + +char popcnt64_0[_popcnt64(0x0000000000000000ULL) == 0 ? 1 : -1]; +char popcnt64_1[_popcnt64(0xF00000F000000001ULL) == 9 ? 1 : -1]; + +char popcntq_0[__popcntq(0x0000000000000000ULL) == 0 ? 1 : -1]; +char popcntq_1[__popcntq(0xF000010000300001ULL) == 8 ? 1 : -1]; +#endif +#endif diff --git a/clang/test/CodeGen/X86/rot-intrinsics.c b/clang/test/CodeGen/X86/rot-intrinsics.c index f8c78119a1c4a77..70bda329ce860c9 100644 --- a/clang/test/CodeGen/X86/rot-intrinsics.c +++ b/clang/test/CodeGen/X86/rot-intrinsics.c @@ -5,13 +5,6 @@ // RUN: %clang_cc1 -x c -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG // RUN: %clang_cc1 -x c -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple i686--linux -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple x86_64--linux -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-64BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG -// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG - #include <x86intrin.h> unsigned char test__rolb(unsigned char value, int shift) { diff --git a/clang/test/CodeGen/X86/rot-intrinsics.cpp b/clang/test/CodeGen/X86/rot-intrinsics.cpp new file mode 100644 index 000000000000000..90afa91f335e83d --- /dev/null +++ b/clang/test/CodeGen/X86/rot-intrinsics.cpp @@ -0,0 +1,165 @@ +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple i686--linux -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG-NO-COMPAT17 +// RUN: %clang_cc1 -x c++ -std=c++11 -ffreestanding -triple x86_64--linux -emit-llvm %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-64BIT-LONG +// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG-NO-COMPAT17 +// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG-NO-COMPAT17 +// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=i686-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG-COMPAT17 +// RUN: %clang_cc1 -x c++ -std=c++11 -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +sse2 -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefixes CHECK,CHECK-32BIT-LONG-COMPAT17 + +#include <x86intrin.h> + +unsigned char test__rolb(unsigned char value, int shift) { +// CHECK-LABEL: test__rolb +// CHECK: [[R:%.*]] = call noundef i8 @llvm.fshl.i8(i8 [[X:%.*]], i8 [[X]], i8 [[Y:%.*]]) +// CHECK: ret i8 [[R]] + return __rolb(value, shift); +} + +unsigned short test__rolw(unsigned short value, int shift) { +// CHECK-LABEL: test__rolw +// CHECK: [[R:%.*]] = call noundef i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y:%.*]]) +// CHECK: ret i16 [[R]] + return __rolw(value, shift); +} + +unsigned int test__rold(unsigned int value, int shift) { +// CHECK-LABEL: test__rold +// CHECK: [[R:%.*]] = call noundef i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK: ret i32 [[R]] + return __rold(value, shift); +} + +#if defined(__x86_64__) +unsigned long test__rolq(unsigned long value, int shift) { +// CHECK-LONG-LABEL: test__rolq +// CHECK-LONG: [[R:%.*]] = call i64 @llvm.fshl.i64(i64 [[X:%.*]], i64 [[X]], i64 [[Y:%.*]]) +// CHECK-LONG: ret i64 [[R]] + return __rolq(value, shift); +} +#endif + +unsigned char test__rorb(unsigned char value, int shift) { +// CHECK-LABEL: test__rorb +// CHECK: [[R:%.*]] = call noundef i8 @llvm.fshr.i8(i8 [[X:%.*]], i8 [[X]], i8 [[Y:%.*]]) +// CHECK: ret i8 [[R]] + return __rorb(value, shift); +} + +unsigned short test__rorw(unsigned short value, int shift) { +// CHECK-LABEL: test__rorw +// CHECK: [[R:%.*]] = call noundef i16 @llvm.fshr.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y:%.*]]) +// CHECK: ret i16 [[R]] + return __rorw(value, shift); +} + +unsigned int test__rord(unsigned int value, int shift) { +// CHECK-LABEL: test__rord +// CHECK: [[R:%.*]] = call noundef i32 @llvm.fshr.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK: ret i32 [[R]] + return __rord(value, shift); +} + +#if defined(__x86_64__) +unsigned long test__rorq(unsigned long value, int shift) { +// CHECK-LONG-LABEL: test__rorq +// CHECK-LONG: [[R:%.*]] = call i64 @llvm.fshr.i64(i64 [[X:%.*]], i64 [[X]], i64 [[Y:%.*]]) +// CHECK-LONG: ret i64 [[R]] + return __rorq(value, shift); +} +#endif + +unsigned short test_rotwl(unsigned short value, int shift) { +// CHECK-LABEL: test_rotwl +// CHECK: [[R:%.*]] = call noundef i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y:%.*]]) +// CHECK: ret i16 [[R]] + return _rotwl(value, shift); +} + +unsigned int test_rotl(unsigned int value, int shift) { +// CHECK-32BIT-LONG-COMPAT17-LABEL: test_rotl +// CHECK-32BIT-LONG-COMPAT17: [[R:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK-32BIT-LONG-COMPAT17: ret i32 [[R]] +// +// CHECK-32BIT-LONG-NO-COMPAT17-LABEL: test_rotl +// CHECK-32BIT-LONG-NO-COMPAT17: [[R:%.*]] = call noundef i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK-32BIT-LONG-NO-COMPAT17: ret i32 [[R]] + return _rotl(value, shift); +} + +unsigned long test_lrotl(unsigned long value, int shift) { +// CHECK-32BIT-LONG-COMPAT17-LABEL: test_lrotl +// CHECK-32BIT-LONG-COMPAT17: [[R:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK-32BIT-LONG-COMPAT17: ret i32 [[R]] +// +// CHECK-32BIT-LONG-NO-COMPAT17-LABEL: test_lrotl +// CHECK-32BIT-LONG-NO-COMPAT17: [[R:%.*]] = call noundef i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]]) +// CHECK-32BIT-LONG-NO-COMPAT17: ret i32 [[R]] +// +// CHECK-64BIT-LONG-LABEL: test_lrotl +// CHECK-64BIT-LONG: [[R:%.*]] = call noundef i64 @llvm.fshl.i64(i64 [[X:%.*]], i64 [[X]], i64 [[Y:%.*]]) +// CHECK-64BIT-LONG: ret i64 [[R]] + return _lrotl(value, shift); +} + + +unsigned short test_ro... <truncated> </pre> </details> https://github.com/llvm/llvm-project/pull/66036 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits