@@ -340,8 +340,8 @@ impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
340340 attrs. push ( llvm:: AttributeKind :: WillReturn . create_attr ( self . cx . llcx ) ) ;
341341 } else if options. contains ( InlineAsmOptions :: NOMEM ) {
342342 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 ) ) ;
345345 }
346346 attributes:: apply_to_callsite ( result, llvm:: AttributePlace :: Function , & { attrs } ) ;
347347
@@ -662,7 +662,12 @@ fn reg_to_llvm(reg: InlineAsmRegOrRegClass, layout: Option<&TyAndLayout<'_>>) ->
662662 PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => "b" ,
663663 PowerPC ( PowerPCInlineAsmRegClass :: freg) => "f" ,
664664 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+ ) => {
666671 unreachable ! ( "clobber-only" )
667672 }
668673 RiscV ( RiscVInlineAsmRegClass :: reg) => "r" ,
@@ -830,7 +835,12 @@ fn dummy_output_type<'ll>(cx: &CodegenCx<'ll, '_>, reg: InlineAsmRegClass) -> &'
830835 PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => cx. type_i32 ( ) ,
831836 PowerPC ( PowerPCInlineAsmRegClass :: freg) => cx. type_f64 ( ) ,
832837 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+ ) => {
834844 unreachable ! ( "clobber-only" )
835845 }
836846 RiscV ( RiscVInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
0 commit comments