45 lines · plain
1; RUN: llc < %s -mtriple=xcore | FileCheck %s2 3declare void @llvm.xcore.setv.p1(ptr addrspace(1) %r, ptr %p)4declare ptr @llvm.xcore.waitevent()5declare ptr @llvm.xcore.checkevent(ptr)6declare void @llvm.xcore.clre()7 8define i32 @f(ptr addrspace(1) %r) nounwind {9; CHECK-LABEL: f:10entry:11; CHECK: clre12 call void @llvm.xcore.clre()13 call void @llvm.xcore.setv.p1(ptr addrspace(1) %r, ptr blockaddress(@f, %L1))14 call void @llvm.xcore.setv.p1(ptr addrspace(1) %r, ptr blockaddress(@f, %L2))15 %goto_addr = call ptr @llvm.xcore.waitevent()16; CHECK: waiteu17 indirectbr ptr %goto_addr, [label %L1, label %L2]18L1:19 br label %ret20L2:21 br label %ret22ret:23 %retval = phi i32 [1, %L1], [2, %L2]24 ret i32 %retval25}26 27define i32 @g(ptr addrspace(1) %r) nounwind {28; CHECK-LABEL: g:29entry:30; CHECK: clre31 call void @llvm.xcore.clre()32 call void @llvm.xcore.setv.p1(ptr addrspace(1) %r, ptr blockaddress(@f, %L1))33 %goto_addr = call ptr @llvm.xcore.checkevent(ptr blockaddress(@f, %L2))34; CHECK: setsr 135; CHECK: clrsr 136 indirectbr ptr %goto_addr, [label %L1, label %L2]37L1:38 br label %ret39L2:40 br label %ret41ret:42 %retval = phi i32 [1, %L1], [2, %L2]43 ret i32 %retval44}45