@@ -360,6 +360,104 @@ start:
360360 ret double %c
361361}
362362
363+ define dso_local void @trunc_store (ptr addrspace (200 ) noundef writeonly captures(none) initializes((0 , 4 )) %a , double noundef %b ) local_unnamed_addr addrspace (200 ) #0 {
364+ ; CHECK-LABEL: trunc_store:
365+ ; CHECK: # %bb.0: # %entry
366+ ; CHECK-NEXT: ct.cincoffset csp, csp, -16
367+ ; CHECK-NEXT: ct.csc cra, 8(csp) # 8-byte Folded Spill
368+ ; CHECK-NEXT: ct.csc cs0, 0(csp) # 8-byte Folded Spill
369+ ; CHECK-NEXT: ct.cmove cs0, ca0
370+ ; CHECK-NEXT: ct.cmove ca0, ca1
371+ ; CHECK-NEXT: .LBB19_1: # %entry
372+ ; CHECK-NEXT: # Label of block must be emitted
373+ ; CHECK-NEXT: ct.auipcc ct2, %cheriot_compartment_hi(__library_import_libcalls___truncdfsf2)
374+ ; CHECK-NEXT: ct.clc ct2, %cheriot_compartment_lo_i(.LBB19_1)(ct2)
375+ ; CHECK-NEXT: ct.cjalr ct2
376+ ; CHECK-NEXT: ct.csw a0, 0(cs0)
377+ ; CHECK-NEXT: ct.clc cra, 8(csp) # 8-byte Folded Reload
378+ ; CHECK-NEXT: ct.clc cs0, 0(csp) # 8-byte Folded Reload
379+ ; CHECK-NEXT: ct.cincoffset csp, csp, 16
380+ ; CHECK-NEXT: ct.cret
381+ entry:
382+ %conv = fptrunc double %b to float
383+ store float %conv , ptr addrspace (200 ) %a , align 4 , !tbaa !6
384+ ret void
385+ }
386+
387+ define dso_local void @ext_store (ptr addrspace (200 ) noundef writeonly captures(none) initializes((0 , 8 )) %a , float noundef %b ) local_unnamed_addr addrspace (200 ) #0 {
388+ ; CHECK-LABEL: ext_store:
389+ ; CHECK: # %bb.0: # %entry
390+ ; CHECK-NEXT: ct.cincoffset csp, csp, -16
391+ ; CHECK-NEXT: ct.csc cra, 8(csp) # 8-byte Folded Spill
392+ ; CHECK-NEXT: ct.csc cs0, 0(csp) # 8-byte Folded Spill
393+ ; CHECK-NEXT: ct.cmove cs0, ca0
394+ ; CHECK-NEXT: mv a0, a1
395+ ; CHECK-NEXT: .LBB20_1: # %entry
396+ ; CHECK-NEXT: # Label of block must be emitted
397+ ; CHECK-NEXT: ct.auipcc ct2, %cheriot_compartment_hi(__library_import_libcalls___extendsfdf2)
398+ ; CHECK-NEXT: ct.clc ct2, %cheriot_compartment_lo_i(.LBB20_1)(ct2)
399+ ; CHECK-NEXT: ct.cjalr ct2
400+ ; CHECK-NEXT: ct.csc ca0, 0(cs0)
401+ ; CHECK-NEXT: ct.clc cra, 8(csp) # 8-byte Folded Reload
402+ ; CHECK-NEXT: ct.clc cs0, 0(csp) # 8-byte Folded Reload
403+ ; CHECK-NEXT: ct.cincoffset csp, csp, 16
404+ ; CHECK-NEXT: ct.cret
405+ entry:
406+ %conv = fpext float %b to double
407+ store double %conv , ptr addrspace (200 ) %a , align 8 , !tbaa !10
408+ ret void
409+ }
410+
411+ define dso_local void @load_ext_store (ptr addrspace (200 ) noundef writeonly captures(none) initializes((0 , 8 )) %a , ptr addrspace (200 ) noundef readonly captures(none) %b ) local_unnamed_addr addrspace (200 ) #1 {
412+ ; CHECK-LABEL: load_ext_store:
413+ ; CHECK: # %bb.0: # %entry
414+ ; CHECK-NEXT: ct.cincoffset csp, csp, -16
415+ ; CHECK-NEXT: ct.csc cra, 8(csp) # 8-byte Folded Spill
416+ ; CHECK-NEXT: ct.csc cs0, 0(csp) # 8-byte Folded Spill
417+ ; CHECK-NEXT: ct.clw a1, 0(ca1)
418+ ; CHECK-NEXT: ct.cmove cs0, ca0
419+ ; CHECK-NEXT: mv a0, a1
420+ ; CHECK-NEXT: .LBB21_1: # %entry
421+ ; CHECK-NEXT: # Label of block must be emitted
422+ ; CHECK-NEXT: ct.auipcc ct2, %cheriot_compartment_hi(__library_import_libcalls___extendsfdf2)
423+ ; CHECK-NEXT: ct.clc ct2, %cheriot_compartment_lo_i(.LBB21_1)(ct2)
424+ ; CHECK-NEXT: ct.cjalr ct2
425+ ; CHECK-NEXT: ct.csc ca0, 0(cs0)
426+ ; CHECK-NEXT: ct.clc cra, 8(csp) # 8-byte Folded Reload
427+ ; CHECK-NEXT: ct.clc cs0, 0(csp) # 8-byte Folded Reload
428+ ; CHECK-NEXT: ct.cincoffset csp, csp, 16
429+ ; CHECK-NEXT: ct.cret
430+ entry:
431+ %0 = load float , ptr addrspace (200 ) %b , align 4 , !tbaa !6
432+ %conv = fpext float %0 to double
433+ store double %conv , ptr addrspace (200 ) %a , align 8 , !tbaa !10
434+ ret void
435+ }
436+
437+ define dso_local void @load_trunc_store (ptr addrspace (200 ) noundef readonly captures(none) %a , ptr addrspace (200 ) noundef writeonly captures(none) initializes((0 , 4 )) %b ) local_unnamed_addr addrspace (200 ) #1 {
438+ ; CHECK-LABEL: load_trunc_store:
439+ ; CHECK: # %bb.0: # %entry
440+ ; CHECK-NEXT: ct.cincoffset csp, csp, -16
441+ ; CHECK-NEXT: ct.csc cra, 8(csp) # 8-byte Folded Spill
442+ ; CHECK-NEXT: ct.csc cs0, 0(csp) # 8-byte Folded Spill
443+ ; CHECK-NEXT: ct.clc ca0, 0(ca0)
444+ ; CHECK-NEXT: ct.cmove cs0, ca1
445+ ; CHECK-NEXT: .LBB22_1: # %entry
446+ ; CHECK-NEXT: # Label of block must be emitted
447+ ; CHECK-NEXT: ct.auipcc ct2, %cheriot_compartment_hi(__library_import_libcalls___truncdfsf2)
448+ ; CHECK-NEXT: ct.clc ct2, %cheriot_compartment_lo_i(.LBB22_1)(ct2)
449+ ; CHECK-NEXT: ct.cjalr ct2
450+ ; CHECK-NEXT: ct.csw a0, 0(cs0)
451+ ; CHECK-NEXT: ct.clc cra, 8(csp) # 8-byte Folded Reload
452+ ; CHECK-NEXT: ct.clc cs0, 0(csp) # 8-byte Folded Reload
453+ ; CHECK-NEXT: ct.cincoffset csp, csp, 16
454+ ; CHECK-NEXT: ct.cret
455+ entry:
456+ %0 = load double , ptr addrspace (200 ) %a , align 8 , !tbaa !10
457+ %conv = fptrunc double %0 to float
458+ store float %conv , ptr addrspace (200 ) %b , align 4 , !tbaa !6
459+ ret void
460+ }
363461
364462attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) "cheri-compartment"="qoi_decode" "no-builtin-longjmp" "no-builtin-printf" "no-builtin-setjmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cheriot" "target-features"="+32bit,+c,+e,+m,+relax,+unaligned-scalar-mem,+xcheri,+xcheriot,+zmmul,-a,-b,-d,-experimental-sdext,-experimental-sdtrig,-experimental-smctr,-experimental-ssctr,-experimental-svukte,-experimental-xqcia,-experimental-xqciac,-experimental-xqcicli,-experimental-xqcicm,-experimental-xqcics,-experimental-xqcicsr,-experimental-xqciint,-experimental-xqcilo,-experimental-xqcilsm,-experimental-xqcisls,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-f,-h,-i,-sha,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smdbltrp,-smepmp,-smmpm,-smnpm,-smrnmi,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssdbltrp,-ssnpm,-sspm,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-supm,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-svvptc,-v,-xcheri-norvc,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xmipscmove,-xmipslsp,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zacas,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zicsr,-zifencei,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zve32f,-zve32x,-zve64d,-zve64f,-zve64x,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl128b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl32b,-zvl4096b,-zvl512b,-zvl64b,-zvl65536b,-zvl8192b" }
365463attributes #1 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: read) "cheri-compartment"="qoi_decode" "no-builtin-longjmp" "no-builtin-printf" "no-builtin-setjmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="cheriot" "target-features"="+32bit,+c,+e,+m,+relax,+unaligned-scalar-mem,+xcheri,+xcheriot,+zmmul,-a,-b,-d,-experimental-sdext,-experimental-sdtrig,-experimental-smctr,-experimental-ssctr,-experimental-svukte,-experimental-xqcia,-experimental-xqciac,-experimental-xqcicli,-experimental-xqcicm,-experimental-xqcics,-experimental-xqcicsr,-experimental-xqciint,-experimental-xqcilo,-experimental-xqcilsm,-experimental-xqcisls,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-f,-h,-i,-sha,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smdbltrp,-smepmp,-smmpm,-smnpm,-smrnmi,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssdbltrp,-ssnpm,-sspm,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-supm,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-svvptc,-v,-xcheri-norvc,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xmipscmove,-xmipslsp,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zacas,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zicsr,-zifencei,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zve32f,-zve32x,-zve64d,-zve64f,-zve64x,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl128b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl32b,-zvl4096b,-zvl512b,-zvl64b,-zvl65536b,-zvl8192b" }
0 commit comments