; LLVM IR from eclipse-threadx/threadx :: ports/risc-v64/gnu/example_build/qemu_virt (uart)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [47 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @uart_init() #0 {
  store volatile i8 0, ptr inttoptr (i64 268435457 to ptr), align 1, !tbaa !5
  store volatile i8 -128, ptr inttoptr (i64 268435459 to ptr), align 1, !tbaa !5
  store volatile i8 3, ptr inttoptr (i64 268435456 to ptr), align 1, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 268435457 to ptr), align 1, !tbaa !5
  store volatile i8 3, ptr inttoptr (i64 268435459 to ptr), align 1, !tbaa !5
  store volatile i8 7, ptr inttoptr (i64 268435458 to ptr), align 1, !tbaa !5
  call void @plic_irq_enable(i32 noundef 10)
  call void @plic_prio_set(i32 noundef 10, i32 noundef 1)
  %1 = call i32 @uart_puts(ptr noundef @.str)
  ret i32 0
}

declare void @plic_irq_enable(i32 noundef) #1

declare void @plic_prio_set(i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @uart_puts(ptr noundef) #0

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [47 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @uart_init() local_unnamed_addr #0 {
  store volatile i8 0, ptr inttoptr (i64 268435457 to ptr), align 1, !tbaa !5
  store volatile i8 -128, ptr inttoptr (i64 268435459 to ptr), align 1, !tbaa !5
  store volatile i8 3, ptr inttoptr (i64 268435456 to ptr), align 268435456, !tbaa !5
  store volatile i8 0, ptr inttoptr (i64 268435457 to ptr), align 1, !tbaa !5
  store volatile i8 3, ptr inttoptr (i64 268435459 to ptr), align 1, !tbaa !5
  store volatile i8 7, ptr inttoptr (i64 268435458 to ptr), align 2, !tbaa !5
  tail call void @plic_irq_enable(i32 noundef 10) #2
  tail call void @plic_prio_set(i32 noundef 10, i32 noundef 1) #2
  %1 = tail call i32 @uart_puts(ptr noundef nonnull @.str)
  ret i32 0
}

declare void @plic_irq_enable(i32 noundef) local_unnamed_addr #1

declare void @plic_prio_set(i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @uart_puts(ptr noundef) local_unnamed_addr #0

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}


; Effective O3 passes: GlobalOptPass,InferAlignmentPass,InstCombinePass,PostOrderFunctionAttrsPass,TailCallElimPass