1; RUN: opt -S -licm %s | FileCheck %s 2 3; Volatile register shouldn't be hoisted ourside loops. 4define i32 @test_read() { 5; CHECK-LABEL: define i32 @test_read() 6; CHECK: br label %loop 7; CHECK: loop: 8; CHECK: %counter = tail call i64 @llvm.read_volatile_register 9 10entry: 11 br label %loop 12 13loop: 14 %i = phi i32 [ 0, %entry ], [ %i.next, %inc ] 15 %counter = tail call i64 @llvm.read_volatile_register.i64(metadata !1) 16 %tst = icmp ult i64 %counter, 1000 17 br i1 %tst, label %inc, label %done 18 19inc: 20 %i.next = add nuw nsw i32 %i, 1 21 br label %loop 22 23done: 24 ret i32 %i 25} 26 27declare i64 @llvm.read_register.i64(metadata) 28declare i64 @llvm.read_volatile_register.i64(metadata) 29 30!1 = !{!"cntpct_el0"} 31