--- /dev/null
+; RUN: llvm-as < %s | opt -basicaa -licm | llvm-dis | grep -C1 sin | grep Out:
+declare double %sin(double)
+declare void %foo()
+
+double %test(double %X) {
+ br label %Loop
+
+Loop:
+ call void %foo() ;; Unknown effects!
+
+ %A = call double %sin(double %X) ;; Can still hoist/sink call
+ br bool true, label %Loop, label %Out
+
+Out:
+ ret double %A
+}
--- /dev/null
+; RUN: llvm-as < %s | opt -basicaa -licm | llvm-dis | grep -C1 strlen | grep Out:
+declare int %strlen(sbyte*)
+declare void %foo()
+
+int %test(sbyte* %P) {
+ br label %Loop
+
+Loop:
+ %A = call int %strlen(sbyte* %P) ;; Can hoist/sink call
+ br bool false, label %Loop, label %Out
+
+Out:
+ ret int %A
+}