@@ -340,8 +340,8 @@ impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
340
340
attrs. push ( llvm:: AttributeKind :: WillReturn . create_attr ( self . cx . llcx ) ) ;
341
341
} else if options. contains ( InlineAsmOptions :: NOMEM ) {
342
342
attrs. push ( llvm:: MemoryEffects :: InaccessibleMemOnly . create_attr ( self . cx . llcx ) ) ;
343
- } else {
344
- // LLVM doesn't have an attribute to represent ReadOnly + SideEffect
343
+ } else if options . contains ( InlineAsmOptions :: READONLY ) {
344
+ attrs . push ( llvm :: MemoryEffects :: ReadOnlyNotPure . create_attr ( self . cx . llcx ) ) ;
345
345
}
346
346
attributes:: apply_to_callsite ( result, llvm:: AttributePlace :: Function , & { attrs } ) ;
347
347
@@ -662,7 +662,12 @@ fn reg_to_llvm(reg: InlineAsmRegOrRegClass, layout: Option<&TyAndLayout<'_>>) ->
662
662
PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => "b" ,
663
663
PowerPC ( PowerPCInlineAsmRegClass :: freg) => "f" ,
664
664
PowerPC ( PowerPCInlineAsmRegClass :: vreg) => "v" ,
665
- PowerPC ( PowerPCInlineAsmRegClass :: cr) | PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
665
+ PowerPC (
666
+ PowerPCInlineAsmRegClass :: cr
667
+ | PowerPCInlineAsmRegClass :: ctr
668
+ | PowerPCInlineAsmRegClass :: lr
669
+ | PowerPCInlineAsmRegClass :: xer,
670
+ ) => {
666
671
unreachable ! ( "clobber-only" )
667
672
}
668
673
RiscV ( RiscVInlineAsmRegClass :: reg) => "r" ,
@@ -830,7 +835,12 @@ fn dummy_output_type<'ll>(cx: &CodegenCx<'ll, '_>, reg: InlineAsmRegClass) -> &'
830
835
PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => cx. type_i32 ( ) ,
831
836
PowerPC ( PowerPCInlineAsmRegClass :: freg) => cx. type_f64 ( ) ,
832
837
PowerPC ( PowerPCInlineAsmRegClass :: vreg) => cx. type_vector ( cx. type_i32 ( ) , 4 ) ,
833
- PowerPC ( PowerPCInlineAsmRegClass :: cr) | PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
838
+ PowerPC (
839
+ PowerPCInlineAsmRegClass :: cr
840
+ | PowerPCInlineAsmRegClass :: ctr
841
+ | PowerPCInlineAsmRegClass :: lr
842
+ | PowerPCInlineAsmRegClass :: xer,
843
+ ) => {
834
844
unreachable ! ( "clobber-only" )
835
845
}
836
846
RiscV ( RiscVInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
0 commit comments