extra-copies.ll 939 B

1234567891011121314151617181920212223242526272829
  1. ; RUN: opt < %s -licm -S | FileCheck %s
  2. ; PR19835
  3. target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  4. target triple = "x86_64-unknown-linux-gnu"
  5. define i32 @f(i32 %x) {
  6. entry:
  7. br label %for.body
  8. for.body: ; preds = %entry, %for.body
  9. %storemerge4 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
  10. %mul = mul nsw i32 %x, %x
  11. %add2 = add nsw i32 %mul, %x
  12. %mul3 = add nsw i32 %add2, %mul
  13. %inc = add nsw i32 %storemerge4, 1
  14. %cmp = icmp slt i32 %inc, 100
  15. br i1 %cmp, label %for.body, label %for.end
  16. for.end: ; preds = %for.body
  17. %a9.0.lcssa = phi i32 [ %mul3, %for.body ]
  18. ret i32 %a9.0.lcssa
  19. }
  20. ; Test that there is exactly one copy of mul nsw i32 %x, %x in the exit block.
  21. ; CHECK: define i32 @f(i32 [[X:%.*]])
  22. ; CHECK: for.end:
  23. ; CHECK-NOT: mul nsw i32 [[X]], [[X]]
  24. ; CHECK: mul nsw i32 [[X]], [[X]]
  25. ; CHECK-NOT: mul nsw i32 [[X]], [[X]]