brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · f5e07cd Raw
111 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse2 -fclangir -emit-cir -o %t.cir -Wall -Werror2// RUN: FileCheck --check-prefixes=CIR --input-file=%t.cir %s3// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse2 -fno-signed-char -fclangir -emit-cir -o %t.cir -Wall -Werror4// RUN: FileCheck --check-prefixes=CIR --input-file=%t.cir %s5 6// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse2 -fclangir -emit-llvm -o %t.ll -Wall -Werror7// RUN: FileCheck --check-prefixes=LLVM --input-file=%t.ll %s8// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse2 -fno-signed-char -fclangir -emit-llvm -o %t.ll -Wall -Werror9// RUN: FileCheck --check-prefixes=LLVM --input-file=%t.ll %s10 11// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=OGCG12// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s -check-prefix=OGCG13 14// This test mimics clang/test/CodeGen/X86/sse2-builtins.c, which eventually15// CIR shall be able to support fully.16 17#include <immintrin.h>18 19__m128d test_mm_undefined_pd(void) {20  // CIR-LABEL: _mm_undefined_pd21  // CIR: %{{.*}} = cir.const #cir.zero : !cir.vector<2 x !cir.double>22  // CIR: cir.return %{{.*}} : !cir.vector<2 x !cir.double>23 24  // CIR-LABEL: cir.func {{.*}}test_mm_undefined_pd25  // CIR: call @_mm_undefined_pd26 27  // LLVM-LABEL: test_mm_undefined_pd28  // LLVM: store <2 x double> zeroinitializer, ptr %[[A:.*]], align 1629  // LLVM: %{{.*}} = load <2 x double>, ptr %[[A]], align 1630  // LLVM: ret <2 x double> %{{.*}}31 32  // OGCG-LABEL: test_mm_undefined_pd33  // OGCG: ret <2 x double> zeroinitializer34  return _mm_undefined_pd();35}36 37__m128i test_mm_undefined_si128(void) {38  // CIR-LABEL: _mm_undefined_si12839  // CIR: %[[A:.*]] = cir.const #cir.zero : !cir.vector<2 x !cir.double>40  // CIR: %{{.*}} = cir.cast bitcast %[[A]] : !cir.vector<2 x !cir.double> ->41  // CIR: cir.return %{{.*}} :42 43  // CIR-LABEL: cir.func {{.*}}test_mm_undefined_si12844  // CIR: call @_mm_undefined_si12845 46  // LLVM-LABEL: test_mm_undefined_si12847  // LLVM: store <2 x i64> zeroinitializer, ptr %[[A:.*]], align 1648  // LLVM: %{{.*}} = load <2 x i64>, ptr %[[A]], align 1649  // LLVM: ret <2 x i64> %{{.*}}50 51  // OGCG-LABEL: test_mm_undefined_si12852  // OGCG: ret <2 x i64> zeroinitializer53  return _mm_undefined_si128();54}55 56// Lowering to pextrw requires optimization.57int test_mm_extract_epi16(__m128i A) {58  // CIR-LABEL: test_mm_extract_epi1659  // CIR %{{.*}} = cir.vec.extract %{{.*}}[%{{.*}} : {{!u32i|!u64i}}] : !cir.vector<!s16i x 8>60  // CIR %{{.*}} = cir.cast integral %{{.*}} : !u16i -> !s32i61 62  // LLVM-LABEL: test_mm_extract_epi1663  // LLVM: extractelement <8 x i16> %{{.*}}, {{i32|i64}} 164  // LLVM: zext i16 %{{.*}} to i3265 66  // OGCG-LABEL: test_mm_extract_epi1667  // OGCG: extractelement <8 x i16> %{{.*}}, {{i32|i64}} 168  // OGCG: zext i16 %{{.*}} to i3269  return _mm_extract_epi16(A, 1);70}71 72void test_mm_clflush(void* A) {73  // CIR-LABEL: test_mm_clflush74  // LLVM-LABEL: test_mm_clflush75  // OGCG-LABEL: test_mm_clflush76  _mm_clflush(A);77  // CIR: {{%.*}} = cir.call_llvm_intrinsic "x86.sse2.clflush" {{%.*}} : (!cir.ptr<!void>) -> !void78  // LLVM: call void @llvm.x86.sse2.clflush(ptr {{%.*}})79  // OGCG: call void @llvm.x86.sse2.clflush(ptr {{%.*}})80}81 82void test_mm_lfence(void) {83  // CIR-LABEL: test_mm_lfence84  // LLVM-LABEL: test_mm_lfence85  // OGCG-LABEL: test_mm_lfence86  _mm_lfence();87  // CIR: {{%.*}} = cir.call_llvm_intrinsic "x86.sse2.lfence" : () -> !void88  // LLVM: call void @llvm.x86.sse2.lfence()89  // OGCG: call void @llvm.x86.sse2.lfence()90}91 92void test_mm_mfence(void) {93  // CIR-LABEL: test_mm_mfence94  // LLVM-LABEL: test_mm_mfence95  // OGCG-LABEL: test_mm_mfence96  _mm_mfence();97  // CIR: {{%.*}} = cir.call_llvm_intrinsic "x86.sse2.mfence" : () -> !void98  // LLVM: call void @llvm.x86.sse2.mfence()99  // OGCG: call void @llvm.x86.sse2.mfence()100}101 102void test_mm_pause(void) {103  // CIR-LABEL: test_mm_pause104  // LLVM-LABEL: test_mm_pause105  // OGCG-LABEL: test_mm_pause106  _mm_pause();107  // CIR: {{%.*}} = cir.call_llvm_intrinsic "x86.sse2.pause" : () -> !void108  // LLVM: call void @llvm.x86.sse2.pause()109  // OGCG: call void @llvm.x86.sse2.pause()110}111