351 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: powerpc-registered-target3// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu \4// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=64BIT5// RUN: %clang_cc1 -triple powerpc64le-unknown-linux-gnu \6// RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s --check-prefix=64BITLE7// RUN: %clang_cc1 -triple powerpc64-unknown-aix \8// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=64BITAIX9// RUN: %clang_cc1 -triple powerpc-unknown-linux-gnu \10// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=32BIT11// RUN: %clang_cc1 -triple powerpcle-unknown-linux-gnu \12// RUN: -emit-llvm %s -o - -target-cpu pwr8 | FileCheck %s --check-prefix=32BITLE13// RUN: %clang_cc1 -triple powerpc-unknown-aix \14// RUN: -emit-llvm %s -o - -target-cpu pwr7 | FileCheck %s --check-prefix=32BITAIX15 16// 64BIT-LABEL: @testcmplx(17// 64BIT-NEXT: entry:18// 64BIT-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 819// 64BIT-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 820// 64BIT-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 821// 64BIT-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 822// 64BIT-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 823// 64BIT-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 824// 64BIT-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 825// 64BIT-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 026// 64BIT-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 127// 64BIT-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 828// 64BIT-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 829// 64BIT-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 830// 64BIT-NEXT: ret { double, double } [[TMP2]]31//32// 64BITLE-LABEL: @testcmplx(33// 64BITLE-NEXT: entry:34// 64BITLE-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 835// 64BITLE-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 836// 64BITLE-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 837// 64BITLE-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 838// 64BITLE-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 839// 64BITLE-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 840// 64BITLE-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 841// 64BITLE-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 042// 64BITLE-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 143// 64BITLE-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 844// 64BITLE-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 845// 64BITLE-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 846// 64BITLE-NEXT: ret { double, double } [[TMP2]]47//48// 64BITAIX-LABEL: @testcmplx(49// 64BITAIX-NEXT: entry:50// 64BITAIX-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 451// 64BITAIX-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 852// 64BITAIX-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 853// 64BITAIX-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 854// 64BITAIX-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 855// 64BITAIX-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 856// 64BITAIX-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 857// 64BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 058// 64BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 159// 64BITAIX-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 460// 64BITAIX-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 461// 64BITAIX-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 462// 64BITAIX-NEXT: ret { double, double } [[TMP2]]63//64// 32BIT-LABEL: @testcmplx(65// 32BIT-NEXT: entry:66// 32BIT-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 867// 32BIT-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 868// 32BIT-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 869// 32BIT-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 870// 32BIT-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 871// 32BIT-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 872// 32BIT-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT:%.*]], i32 0, i32 073// 32BIT-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 174// 32BIT-NEXT: store double [[TMP0]], ptr [[AGG_RESULT_REALP]], align 875// 32BIT-NEXT: store double [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 876// 32BIT-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 077// 32BIT-NEXT: [[AGG_RESULT_REAL:%.*]] = load double, ptr [[AGG_RESULT_REALP1]], align 878// 32BIT-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 179// 32BIT-NEXT: [[AGG_RESULT_IMAG:%.*]] = load double, ptr [[AGG_RESULT_IMAGP2]], align 880// 32BIT-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 081// 32BIT-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 182// 32BIT-NEXT: store double [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 883// 32BIT-NEXT: store double [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 884// 32BIT-NEXT: ret void85//86// 32BITLE-LABEL: @testcmplx(87// 32BITLE-NEXT: entry:88// 32BITLE-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 889// 32BITLE-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 890// 32BITLE-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 891// 32BITLE-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 892// 32BITLE-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 893// 32BITLE-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 894// 32BITLE-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT:%.*]], i32 0, i32 095// 32BITLE-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 196// 32BITLE-NEXT: store double [[TMP0]], ptr [[AGG_RESULT_REALP]], align 897// 32BITLE-NEXT: store double [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 898// 32BITLE-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 099// 32BITLE-NEXT: [[AGG_RESULT_REAL:%.*]] = load double, ptr [[AGG_RESULT_REALP1]], align 8100// 32BITLE-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 1101// 32BITLE-NEXT: [[AGG_RESULT_IMAG:%.*]] = load double, ptr [[AGG_RESULT_IMAGP2]], align 8102// 32BITLE-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 0103// 32BITLE-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[AGG_RESULT]], i32 0, i32 1104// 32BITLE-NEXT: store double [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 8105// 32BITLE-NEXT: store double [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 8106// 32BITLE-NEXT: ret void107//108// 32BITAIX-LABEL: @testcmplx(109// 32BITAIX-NEXT: entry:110// 32BITAIX-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 4111// 32BITAIX-NEXT: [[REAL_ADDR:%.*]] = alloca double, align 8112// 32BITAIX-NEXT: [[IMAG_ADDR:%.*]] = alloca double, align 8113// 32BITAIX-NEXT: store double [[REAL:%.*]], ptr [[REAL_ADDR]], align 8114// 32BITAIX-NEXT: store double [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 8115// 32BITAIX-NEXT: [[TMP0:%.*]] = load double, ptr [[REAL_ADDR]], align 8116// 32BITAIX-NEXT: [[TMP1:%.*]] = load double, ptr [[IMAG_ADDR]], align 8117// 32BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 0118// 32BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 1119// 32BITAIX-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 4120// 32BITAIX-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 4121// 32BITAIX-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 4122// 32BITAIX-NEXT: ret { double, double } [[TMP2]]123//124double _Complex testcmplx(double real, double imag) {125 return __cmplx(real, imag);126}127 128// 64BIT-LABEL: @testcmplxf(129// 64BIT-NEXT: entry:130// 64BIT-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 4131// 64BIT-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4132// 64BIT-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4133// 64BIT-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4134// 64BIT-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4135// 64BIT-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4136// 64BIT-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4137// 64BIT-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 0138// 64BIT-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 1139// 64BIT-NEXT: store float [[TMP0]], ptr [[RETVAL_REALP]], align 4140// 64BIT-NEXT: store float [[TMP1]], ptr [[RETVAL_IMAGP]], align 4141// 64BIT-NEXT: [[TMP2:%.*]] = load { float, float }, ptr [[RETVAL]], align 4142// 64BIT-NEXT: ret { float, float } [[TMP2]]143//144// 64BITLE-LABEL: @testcmplxf(145// 64BITLE-NEXT: entry:146// 64BITLE-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 4147// 64BITLE-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4148// 64BITLE-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4149// 64BITLE-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4150// 64BITLE-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4151// 64BITLE-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4152// 64BITLE-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4153// 64BITLE-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 0154// 64BITLE-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 1155// 64BITLE-NEXT: store float [[TMP0]], ptr [[RETVAL_REALP]], align 4156// 64BITLE-NEXT: store float [[TMP1]], ptr [[RETVAL_IMAGP]], align 4157// 64BITLE-NEXT: [[TMP2:%.*]] = load { float, float }, ptr [[RETVAL]], align 4158// 64BITLE-NEXT: ret { float, float } [[TMP2]]159//160// 64BITAIX-LABEL: @testcmplxf(161// 64BITAIX-NEXT: entry:162// 64BITAIX-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 4163// 64BITAIX-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4164// 64BITAIX-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4165// 64BITAIX-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4166// 64BITAIX-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4167// 64BITAIX-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4168// 64BITAIX-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4169// 64BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 0170// 64BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 1171// 64BITAIX-NEXT: store float [[TMP0]], ptr [[RETVAL_REALP]], align 4172// 64BITAIX-NEXT: store float [[TMP1]], ptr [[RETVAL_IMAGP]], align 4173// 64BITAIX-NEXT: [[TMP2:%.*]] = load { float, float }, ptr [[RETVAL]], align 4174// 64BITAIX-NEXT: ret { float, float } [[TMP2]]175//176// 32BIT-LABEL: @testcmplxf(177// 32BIT-NEXT: entry:178// 32BIT-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4179// 32BIT-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4180// 32BIT-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4181// 32BIT-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4182// 32BIT-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4183// 32BIT-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4184// 32BIT-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT:%.*]], i32 0, i32 0185// 32BIT-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1186// 32BIT-NEXT: store float [[TMP0]], ptr [[AGG_RESULT_REALP]], align 4187// 32BIT-NEXT: store float [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 4188// 32BIT-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 0189// 32BIT-NEXT: [[AGG_RESULT_REAL:%.*]] = load float, ptr [[AGG_RESULT_REALP1]], align 4190// 32BIT-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1191// 32BIT-NEXT: [[AGG_RESULT_IMAG:%.*]] = load float, ptr [[AGG_RESULT_IMAGP2]], align 4192// 32BIT-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 0193// 32BIT-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1194// 32BIT-NEXT: store float [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 4195// 32BIT-NEXT: store float [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 4196// 32BIT-NEXT: ret void197//198// 32BITLE-LABEL: @testcmplxf(199// 32BITLE-NEXT: entry:200// 32BITLE-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4201// 32BITLE-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4202// 32BITLE-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4203// 32BITLE-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4204// 32BITLE-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4205// 32BITLE-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4206// 32BITLE-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT:%.*]], i32 0, i32 0207// 32BITLE-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1208// 32BITLE-NEXT: store float [[TMP0]], ptr [[AGG_RESULT_REALP]], align 4209// 32BITLE-NEXT: store float [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 4210// 32BITLE-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 0211// 32BITLE-NEXT: [[AGG_RESULT_REAL:%.*]] = load float, ptr [[AGG_RESULT_REALP1]], align 4212// 32BITLE-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1213// 32BITLE-NEXT: [[AGG_RESULT_IMAG:%.*]] = load float, ptr [[AGG_RESULT_IMAGP2]], align 4214// 32BITLE-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 0215// 32BITLE-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[AGG_RESULT]], i32 0, i32 1216// 32BITLE-NEXT: store float [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 4217// 32BITLE-NEXT: store float [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 4218// 32BITLE-NEXT: ret void219//220// 32BITAIX-LABEL: @testcmplxf(221// 32BITAIX-NEXT: entry:222// 32BITAIX-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 4223// 32BITAIX-NEXT: [[REAL_ADDR:%.*]] = alloca float, align 4224// 32BITAIX-NEXT: [[IMAG_ADDR:%.*]] = alloca float, align 4225// 32BITAIX-NEXT: store float [[REAL:%.*]], ptr [[REAL_ADDR]], align 4226// 32BITAIX-NEXT: store float [[IMAG:%.*]], ptr [[IMAG_ADDR]], align 4227// 32BITAIX-NEXT: [[TMP0:%.*]] = load float, ptr [[REAL_ADDR]], align 4228// 32BITAIX-NEXT: [[TMP1:%.*]] = load float, ptr [[IMAG_ADDR]], align 4229// 32BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 0230// 32BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[RETVAL]], i32 0, i32 1231// 32BITAIX-NEXT: store float [[TMP0]], ptr [[RETVAL_REALP]], align 4232// 32BITAIX-NEXT: store float [[TMP1]], ptr [[RETVAL_IMAGP]], align 4233// 32BITAIX-NEXT: [[TMP2:%.*]] = load { float, float }, ptr [[RETVAL]], align 4234// 32BITAIX-NEXT: ret { float, float } [[TMP2]]235//236float _Complex testcmplxf(float real, float imag) {237 return __cmplxf(real, imag);238}239 240// 64BIT-LABEL: @test_xl_cmplxl(241// 64BIT-NEXT: entry:242// 64BIT-NEXT: [[RETVAL:%.*]] = alloca { ppc_fp128, ppc_fp128 }, align 16243// 64BIT-NEXT: [[LDA_ADDR:%.*]] = alloca ppc_fp128, align 16244// 64BIT-NEXT: [[LDB_ADDR:%.*]] = alloca ppc_fp128, align 16245// 64BIT-NEXT: store ppc_fp128 [[LDA:%.*]], ptr [[LDA_ADDR]], align 16246// 64BIT-NEXT: store ppc_fp128 [[LDB:%.*]], ptr [[LDB_ADDR]], align 16247// 64BIT-NEXT: [[TMP0:%.*]] = load ppc_fp128, ptr [[LDA_ADDR]], align 16248// 64BIT-NEXT: [[TMP1:%.*]] = load ppc_fp128, ptr [[LDB_ADDR]], align 16249// 64BIT-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], i32 0, i32 0250// 64BIT-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], i32 0, i32 1251// 64BIT-NEXT: store ppc_fp128 [[TMP0]], ptr [[RETVAL_REALP]], align 16252// 64BIT-NEXT: store ppc_fp128 [[TMP1]], ptr [[RETVAL_IMAGP]], align 16253// 64BIT-NEXT: [[TMP2:%.*]] = load { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], align 16254// 64BIT-NEXT: ret { ppc_fp128, ppc_fp128 } [[TMP2]]255//256// 64BITLE-LABEL: @test_xl_cmplxl(257// 64BITLE-NEXT: entry:258// 64BITLE-NEXT: [[RETVAL:%.*]] = alloca { ppc_fp128, ppc_fp128 }, align 16259// 64BITLE-NEXT: [[LDA_ADDR:%.*]] = alloca ppc_fp128, align 16260// 64BITLE-NEXT: [[LDB_ADDR:%.*]] = alloca ppc_fp128, align 16261// 64BITLE-NEXT: store ppc_fp128 [[LDA:%.*]], ptr [[LDA_ADDR]], align 16262// 64BITLE-NEXT: store ppc_fp128 [[LDB:%.*]], ptr [[LDB_ADDR]], align 16263// 64BITLE-NEXT: [[TMP0:%.*]] = load ppc_fp128, ptr [[LDA_ADDR]], align 16264// 64BITLE-NEXT: [[TMP1:%.*]] = load ppc_fp128, ptr [[LDB_ADDR]], align 16265// 64BITLE-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], i32 0, i32 0266// 64BITLE-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], i32 0, i32 1267// 64BITLE-NEXT: store ppc_fp128 [[TMP0]], ptr [[RETVAL_REALP]], align 16268// 64BITLE-NEXT: store ppc_fp128 [[TMP1]], ptr [[RETVAL_IMAGP]], align 16269// 64BITLE-NEXT: [[TMP2:%.*]] = load { ppc_fp128, ppc_fp128 }, ptr [[RETVAL]], align 16270// 64BITLE-NEXT: ret { ppc_fp128, ppc_fp128 } [[TMP2]]271//272// 64BITAIX-LABEL: @test_xl_cmplxl(273// 64BITAIX-NEXT: entry:274// 64BITAIX-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 4275// 64BITAIX-NEXT: [[LDA_ADDR:%.*]] = alloca double, align 8276// 64BITAIX-NEXT: [[LDB_ADDR:%.*]] = alloca double, align 8277// 64BITAIX-NEXT: store double [[LDA:%.*]], ptr [[LDA_ADDR]], align 8278// 64BITAIX-NEXT: store double [[LDB:%.*]], ptr [[LDB_ADDR]], align 8279// 64BITAIX-NEXT: [[TMP0:%.*]] = load double, ptr [[LDA_ADDR]], align 8280// 64BITAIX-NEXT: [[TMP1:%.*]] = load double, ptr [[LDB_ADDR]], align 8281// 64BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 0282// 64BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 1283// 64BITAIX-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 4284// 64BITAIX-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 4285// 64BITAIX-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 4286// 64BITAIX-NEXT: ret { double, double } [[TMP2]]287//288// 32BIT-LABEL: @test_xl_cmplxl(289// 32BIT-NEXT: entry:290// 32BIT-NEXT: [[LDA_ADDR:%.*]] = alloca ppc_fp128, align 16291// 32BIT-NEXT: [[LDB_ADDR:%.*]] = alloca ppc_fp128, align 16292// 32BIT-NEXT: store ppc_fp128 [[LDA:%.*]], ptr [[LDA_ADDR]], align 16293// 32BIT-NEXT: store ppc_fp128 [[LDB:%.*]], ptr [[LDB_ADDR]], align 16294// 32BIT-NEXT: [[TMP0:%.*]] = load ppc_fp128, ptr [[LDA_ADDR]], align 16295// 32BIT-NEXT: [[TMP1:%.*]] = load ppc_fp128, ptr [[LDB_ADDR]], align 16296// 32BIT-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT:%.*]], i32 0, i32 0297// 32BIT-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1298// 32BIT-NEXT: store ppc_fp128 [[TMP0]], ptr [[AGG_RESULT_REALP]], align 16299// 32BIT-NEXT: store ppc_fp128 [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 16300// 32BIT-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 0301// 32BIT-NEXT: [[AGG_RESULT_REAL:%.*]] = load ppc_fp128, ptr [[AGG_RESULT_REALP1]], align 16302// 32BIT-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1303// 32BIT-NEXT: [[AGG_RESULT_IMAG:%.*]] = load ppc_fp128, ptr [[AGG_RESULT_IMAGP2]], align 16304// 32BIT-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 0305// 32BIT-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1306// 32BIT-NEXT: store ppc_fp128 [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 16307// 32BIT-NEXT: store ppc_fp128 [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 16308// 32BIT-NEXT: ret void309//310// 32BITLE-LABEL: @test_xl_cmplxl(311// 32BITLE-NEXT: entry:312// 32BITLE-NEXT: [[LDA_ADDR:%.*]] = alloca ppc_fp128, align 16313// 32BITLE-NEXT: [[LDB_ADDR:%.*]] = alloca ppc_fp128, align 16314// 32BITLE-NEXT: store ppc_fp128 [[LDA:%.*]], ptr [[LDA_ADDR]], align 16315// 32BITLE-NEXT: store ppc_fp128 [[LDB:%.*]], ptr [[LDB_ADDR]], align 16316// 32BITLE-NEXT: [[TMP0:%.*]] = load ppc_fp128, ptr [[LDA_ADDR]], align 16317// 32BITLE-NEXT: [[TMP1:%.*]] = load ppc_fp128, ptr [[LDB_ADDR]], align 16318// 32BITLE-NEXT: [[AGG_RESULT_REALP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT:%.*]], i32 0, i32 0319// 32BITLE-NEXT: [[AGG_RESULT_IMAGP:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1320// 32BITLE-NEXT: store ppc_fp128 [[TMP0]], ptr [[AGG_RESULT_REALP]], align 16321// 32BITLE-NEXT: store ppc_fp128 [[TMP1]], ptr [[AGG_RESULT_IMAGP]], align 16322// 32BITLE-NEXT: [[AGG_RESULT_REALP1:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 0323// 32BITLE-NEXT: [[AGG_RESULT_REAL:%.*]] = load ppc_fp128, ptr [[AGG_RESULT_REALP1]], align 16324// 32BITLE-NEXT: [[AGG_RESULT_IMAGP2:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1325// 32BITLE-NEXT: [[AGG_RESULT_IMAG:%.*]] = load ppc_fp128, ptr [[AGG_RESULT_IMAGP2]], align 16326// 32BITLE-NEXT: [[AGG_RESULT_REALP3:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 0327// 32BITLE-NEXT: [[AGG_RESULT_IMAGP4:%.*]] = getelementptr inbounds nuw { ppc_fp128, ppc_fp128 }, ptr [[AGG_RESULT]], i32 0, i32 1328// 32BITLE-NEXT: store ppc_fp128 [[AGG_RESULT_REAL]], ptr [[AGG_RESULT_REALP3]], align 16329// 32BITLE-NEXT: store ppc_fp128 [[AGG_RESULT_IMAG]], ptr [[AGG_RESULT_IMAGP4]], align 16330// 32BITLE-NEXT: ret void331//332// 32BITAIX-LABEL: @test_xl_cmplxl(333// 32BITAIX-NEXT: entry:334// 32BITAIX-NEXT: [[RETVAL:%.*]] = alloca { double, double }, align 4335// 32BITAIX-NEXT: [[LDA_ADDR:%.*]] = alloca double, align 8336// 32BITAIX-NEXT: [[LDB_ADDR:%.*]] = alloca double, align 8337// 32BITAIX-NEXT: store double [[LDA:%.*]], ptr [[LDA_ADDR]], align 8338// 32BITAIX-NEXT: store double [[LDB:%.*]], ptr [[LDB_ADDR]], align 8339// 32BITAIX-NEXT: [[TMP0:%.*]] = load double, ptr [[LDA_ADDR]], align 8340// 32BITAIX-NEXT: [[TMP1:%.*]] = load double, ptr [[LDB_ADDR]], align 8341// 32BITAIX-NEXT: [[RETVAL_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 0342// 32BITAIX-NEXT: [[RETVAL_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[RETVAL]], i32 0, i32 1343// 32BITAIX-NEXT: store double [[TMP0]], ptr [[RETVAL_REALP]], align 4344// 32BITAIX-NEXT: store double [[TMP1]], ptr [[RETVAL_IMAGP]], align 4345// 32BITAIX-NEXT: [[TMP2:%.*]] = load { double, double }, ptr [[RETVAL]], align 4346// 32BITAIX-NEXT: ret { double, double } [[TMP2]]347//348long double _Complex test_xl_cmplxl(long double lda, long double ldb) {349 return __cmplxl(lda, ldb);350}351