brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 6375903 Raw
96 lines · cpp
1// RUN: %clang_cc1 -std=c++2a -emit-llvm -o - -disable-llvm-passes -triple x86_64-apple-macos10.14 %s | FileCheck %s2 3void test_scalar(int &oper) {4  // CHECK-LABEL: define{{.*}} void @_Z11test_scalarRi5  __builtin_bit_cast(float, oper);6 7  // CHECK: [[OPER:%.*]] = alloca ptr8  // CHECK: [[REF:%.*]] = load ptr, ptr9  // CHECK-NEXT: load float, ptr [[REF]]10}11 12struct two_ints {13  int x;14  int y;15};16 17unsigned long test_aggregate_to_scalar(two_ints &ti) {18  // CHECK-LABEL: define{{.*}} i64 @_Z24test_aggregate_to_scalarR8two_ints19  return __builtin_bit_cast(unsigned long, ti);20 21  // CHECK: [[TI_ADDR:%.*]] = alloca ptr, align 822  // CHECK: [[TI_LOAD:%.*]] = load ptr, ptr [[TI_ADDR]]23  // CHECK-NEXT: load i64, ptr [[TI_LOAD]]24}25 26struct two_floats {27  float x;28  float y;29};30 31two_floats test_aggregate_record(two_ints& ti) {32  // CHECK-LABEL: define{{.*}} <2 x float> @_Z21test_aggregate_recordR8two_int33   return __builtin_bit_cast(two_floats, ti);34 35  // CHECK: [[RETVAL:%.*]] = alloca %struct.two_floats, align 436  // CHECK: [[TI:%.*]] = alloca ptr, align 837 38  // CHECK: [[LOAD_TI:%.*]] = load ptr, ptr [[TI]]39  // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[LOAD_TI]]40}41 42two_floats test_aggregate_array(int (&ary)[2]) {43  // CHECK-LABEL: define{{.*}} <2 x float> @_Z20test_aggregate_arrayRA2_i44  return __builtin_bit_cast(two_floats, ary);45 46  // CHECK: [[RETVAL:%.*]] = alloca %struct.two_floats, align 447  // CHECK: [[ARY:%.*]] = alloca ptr, align 848 49  // CHECK: [[LOAD_ARY:%.*]] = load ptr, ptr [[ARY]]50  // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[RETVAL]], ptr align 4 [[LOAD_ARY]]51}52 53two_ints test_scalar_to_aggregate(unsigned long ul) {54  // CHECK-LABEL: define{{.*}} i64 @_Z24test_scalar_to_aggregatem55  return __builtin_bit_cast(two_ints, ul);56 57  // CHECK: [[TI:%.*]] = alloca %struct.two_ints, align 458  // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TI]]59}60 61unsigned long test_complex(_Complex unsigned &cu) {62  // CHECK-LABEL: define{{.*}} i64 @_Z12test_complexRCj63  return __builtin_bit_cast(unsigned long, cu);64 65  // CHECK: [[REF_ALLOCA:%.*]] = alloca ptr, align 866  // CHECK-NEXT: store ptr {{.*}}, ptr [[REF_ALLOCA]]67  // CHECK-NEXT: [[REF:%.*]] = load ptr, ptr [[REF_ALLOCA]]68  // CHECK-NEXT: load i64, ptr [[REF]], align 469}70 71_Complex unsigned test_to_complex(unsigned long &ul) {72  // CHECK-LABEL: define{{.*}} i64 @_Z15test_to_complexRm73 74  return __builtin_bit_cast(_Complex unsigned, ul);75 76  // CHECK: [[REF:%.*]] = alloca ptr77  // CHECK: [[LOAD_REF:%.*]] = load ptr, ptr [[REF]]78}79 80unsigned long test_array(int (&ary)[2]) {81  // CHECK-LABEL: define{{.*}} i64 @_Z10test_arrayRA2_i82  return __builtin_bit_cast(unsigned long, ary);83 84  // CHECK: [[REF_ALLOCA:%.*]] = alloca ptr85  // CHECK: [[LOAD_REF:%.*]] = load ptr, ptr [[REF_ALLOCA]]86  // CHECK: load i64, ptr [[LOAD_REF]], align 487}88 89two_ints test_rvalue_aggregate() {90  // CHECK-LABEL: define{{.*}} i64 @_Z21test_rvalue_aggregate91  return __builtin_bit_cast(two_ints, 42ul);92 93  // CHECK: [[TI:%.*]] = alloca %struct.two_ints, align 494  // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TI]]95}96