@@ -488,12 +488,174 @@ static void InitLibcallNames(const char **Names, const Triple &TT) {
488
488
Names[RTLIB::DEOPTIMIZE] = " __llvm_deoptimize" ;
489
489
}
490
490
491
- // / InitLibcallCallingConvs - Set default libcall CallingConvs.
492
- // /
493
- static void InitLibcallCallingConvs (CallingConv::ID *CCs) {
494
- for (int i = 0 ; i < RTLIB::UNKNOWN_LIBCALL; ++i) {
495
- CCs[i] = CallingConv::C;
496
- }
491
+ // / Set default libcall CallingConvs.
492
+ static void InitLibcallCallingConvs (CallingConv::ID *CCs, const Triple &T) {
493
+ for (int LC = 0 ; LC < RTLIB::UNKNOWN_LIBCALL; ++LC)
494
+ CCs[LC] = CallingConv::C;
495
+
496
+ // The builtins on ARM always use AAPCS, irrespective of wheter C is AAPCS or
497
+ // AAPCS_VFP.
498
+ if (T.getArch () == Triple::arm || T.getArch () == Triple::thumb)
499
+ for (const auto LC : {
500
+ RTLIB::SHL_I16,
501
+ RTLIB::SHL_I32,
502
+ RTLIB::SHL_I64,
503
+ RTLIB::SHL_I128,
504
+ RTLIB::SRL_I16,
505
+ RTLIB::SRL_I32,
506
+ RTLIB::SRL_I64,
507
+ RTLIB::SRL_I128,
508
+ RTLIB::SRA_I16,
509
+ RTLIB::SRA_I32,
510
+ RTLIB::SRA_I64,
511
+ RTLIB::SRA_I128,
512
+ RTLIB::MUL_I8,
513
+ RTLIB::MUL_I16,
514
+ RTLIB::MUL_I32,
515
+ RTLIB::MUL_I64,
516
+ RTLIB::MUL_I128,
517
+ RTLIB::MULO_I32,
518
+ RTLIB::MULO_I64,
519
+ RTLIB::MULO_I128,
520
+ RTLIB::SDIV_I8,
521
+ RTLIB::SDIV_I16,
522
+ RTLIB::SDIV_I32,
523
+ RTLIB::SDIV_I64,
524
+ RTLIB::SDIV_I128,
525
+ RTLIB::UDIV_I8,
526
+ RTLIB::UDIV_I16,
527
+ RTLIB::UDIV_I32,
528
+ RTLIB::UDIV_I64,
529
+ RTLIB::UDIV_I128,
530
+ RTLIB::SREM_I8,
531
+ RTLIB::SREM_I16,
532
+ RTLIB::SREM_I32,
533
+ RTLIB::SREM_I64,
534
+ RTLIB::SREM_I128,
535
+ RTLIB::UREM_I8,
536
+ RTLIB::UREM_I16,
537
+ RTLIB::UREM_I32,
538
+ RTLIB::UREM_I64,
539
+ RTLIB::UREM_I128,
540
+ RTLIB::SDIVREM_I8,
541
+ RTLIB::SDIVREM_I16,
542
+ RTLIB::SDIVREM_I32,
543
+ RTLIB::SDIVREM_I64,
544
+ RTLIB::SDIVREM_I128,
545
+ RTLIB::UDIVREM_I8,
546
+ RTLIB::UDIVREM_I16,
547
+ RTLIB::UDIVREM_I32,
548
+ RTLIB::UDIVREM_I64,
549
+ RTLIB::UDIVREM_I128,
550
+ RTLIB::NEG_I32,
551
+ RTLIB::NEG_I64,
552
+ RTLIB::ADD_F32,
553
+ RTLIB::ADD_F64,
554
+ RTLIB::ADD_F80,
555
+ RTLIB::ADD_F128,
556
+ RTLIB::SUB_F32,
557
+ RTLIB::SUB_F64,
558
+ RTLIB::SUB_F80,
559
+ RTLIB::SUB_F128,
560
+ RTLIB::MUL_F32,
561
+ RTLIB::MUL_F64,
562
+ RTLIB::MUL_F80,
563
+ RTLIB::MUL_F128,
564
+ RTLIB::DIV_F32,
565
+ RTLIB::DIV_F64,
566
+ RTLIB::DIV_F80,
567
+ RTLIB::DIV_F128,
568
+ RTLIB::POWI_F32,
569
+ RTLIB::POWI_F64,
570
+ RTLIB::POWI_F80,
571
+ RTLIB::POWI_F128,
572
+ RTLIB::FPEXT_F64_F128,
573
+ RTLIB::FPEXT_F32_F128,
574
+ RTLIB::FPEXT_F32_F64,
575
+ RTLIB::FPEXT_F16_F32,
576
+ RTLIB::FPROUND_F32_F16,
577
+ RTLIB::FPROUND_F64_F16,
578
+ RTLIB::FPROUND_F80_F16,
579
+ RTLIB::FPROUND_F128_F16,
580
+ RTLIB::FPROUND_F64_F32,
581
+ RTLIB::FPROUND_F80_F32,
582
+ RTLIB::FPROUND_F128_F32,
583
+ RTLIB::FPROUND_F80_F64,
584
+ RTLIB::FPROUND_F128_F64,
585
+ RTLIB::FPTOSINT_F32_I32,
586
+ RTLIB::FPTOSINT_F32_I64,
587
+ RTLIB::FPTOSINT_F32_I128,
588
+ RTLIB::FPTOSINT_F64_I32,
589
+ RTLIB::FPTOSINT_F64_I64,
590
+ RTLIB::FPTOSINT_F64_I128,
591
+ RTLIB::FPTOSINT_F80_I32,
592
+ RTLIB::FPTOSINT_F80_I64,
593
+ RTLIB::FPTOSINT_F80_I128,
594
+ RTLIB::FPTOSINT_F128_I32,
595
+ RTLIB::FPTOSINT_F128_I64,
596
+ RTLIB::FPTOSINT_F128_I128,
597
+ RTLIB::FPTOUINT_F32_I32,
598
+ RTLIB::FPTOUINT_F32_I64,
599
+ RTLIB::FPTOUINT_F32_I128,
600
+ RTLIB::FPTOUINT_F64_I32,
601
+ RTLIB::FPTOUINT_F64_I64,
602
+ RTLIB::FPTOUINT_F64_I128,
603
+ RTLIB::FPTOUINT_F80_I32,
604
+ RTLIB::FPTOUINT_F80_I64,
605
+ RTLIB::FPTOUINT_F80_I128,
606
+ RTLIB::FPTOUINT_F128_I32,
607
+ RTLIB::FPTOUINT_F128_I64,
608
+ RTLIB::FPTOUINT_F128_I128,
609
+ RTLIB::SINTTOFP_I32_F32,
610
+ RTLIB::SINTTOFP_I32_F64,
611
+ RTLIB::SINTTOFP_I32_F80,
612
+ RTLIB::SINTTOFP_I32_F128,
613
+ RTLIB::SINTTOFP_I64_F32,
614
+ RTLIB::SINTTOFP_I64_F64,
615
+ RTLIB::SINTTOFP_I64_F80,
616
+ RTLIB::SINTTOFP_I64_F128,
617
+ RTLIB::SINTTOFP_I128_F32,
618
+ RTLIB::SINTTOFP_I128_F64,
619
+ RTLIB::SINTTOFP_I128_F80,
620
+ RTLIB::SINTTOFP_I128_F128,
621
+ RTLIB::UINTTOFP_I32_F32,
622
+ RTLIB::UINTTOFP_I32_F64,
623
+ RTLIB::UINTTOFP_I32_F80,
624
+ RTLIB::UINTTOFP_I32_F128,
625
+ RTLIB::UINTTOFP_I64_F32,
626
+ RTLIB::UINTTOFP_I64_F64,
627
+ RTLIB::UINTTOFP_I64_F80,
628
+ RTLIB::UINTTOFP_I64_F128,
629
+ RTLIB::UINTTOFP_I128_F32,
630
+ RTLIB::UINTTOFP_I128_F64,
631
+ RTLIB::UINTTOFP_I128_F80,
632
+ RTLIB::UINTTOFP_I128_F128,
633
+ RTLIB::OEQ_F32,
634
+ RTLIB::OEQ_F64,
635
+ RTLIB::OEQ_F128,
636
+ RTLIB::UNE_F32,
637
+ RTLIB::UNE_F64,
638
+ RTLIB::UNE_F128,
639
+ RTLIB::OGE_F32,
640
+ RTLIB::OGE_F64,
641
+ RTLIB::OGE_F128,
642
+ RTLIB::OLT_F32,
643
+ RTLIB::OLT_F64,
644
+ RTLIB::OLT_F128,
645
+ RTLIB::OLE_F32,
646
+ RTLIB::OLE_F64,
647
+ RTLIB::OLE_F128,
648
+ RTLIB::OGT_F32,
649
+ RTLIB::OGT_F64,
650
+ RTLIB::OGT_F128,
651
+ RTLIB::UO_F32,
652
+ RTLIB::UO_F64,
653
+ RTLIB::UO_F128,
654
+ RTLIB::O_F32,
655
+ RTLIB::O_F64,
656
+ RTLIB::O_F128,
657
+ })
658
+ CCs[LC] = CallingConv::ARM_AAPCS;
497
659
}
498
660
499
661
// / getFPEXT - Return the FPEXT_*_* value for the given types, or
@@ -835,7 +997,7 @@ TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm) : TM(tm) {
835
997
836
998
InitLibcallNames (LibcallRoutineNames, TM.getTargetTriple ());
837
999
InitCmpLibcallCCs (CmpLibcallCCs);
838
- InitLibcallCallingConvs (LibcallCallingConvs);
1000
+ InitLibcallCallingConvs (LibcallCallingConvs, TM. getTargetTriple () );
839
1001
}
840
1002
841
1003
void TargetLoweringBase::initActions () {
0 commit comments