[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / LoopStrengthReduce / X86 / pr46943.ll
blob89523b4487d497f45803d4ed459095f7172dfcbe
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -loop-reduce < %s | FileCheck %s
4 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
5 target triple = "x86_64-unknown-linux-gnu"
7 declare void @use(i8 zeroext)
8 declare void @use_p(ptr)
10 ; nuw needs to be dropped when switching to post-inc comparison.
11 define i8 @drop_nuw() {
12 ; CHECK-LABEL: @drop_nuw(
13 ; CHECK-NEXT:  entry:
14 ; CHECK-NEXT:    br label [[LOOP:%.*]]
15 ; CHECK:       loop:
16 ; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
17 ; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])
18 ; CHECK-NEXT:    [[IV_NEXT]] = add i8 [[IV]], 1
19 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 0
20 ; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
21 ; CHECK:       exit:
22 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], -1
23 ; CHECK-NEXT:    ret i8 [[TMP0]]
25 entry:
26   br label %loop
28 loop:
29   %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
30   call void @use(i8 zeroext %iv)
32   %iv.next = add nuw i8 %iv, 1
33   %cmp = icmp eq i8 %iv, -1
34   br i1 %cmp, label %exit, label %loop
36 exit:
37   ret i8 %iv
40 ; nsw needs to be dropped when switching to post-inc comparison.
41 define i8 @drop_nsw() {
42 ; CHECK-LABEL: @drop_nsw(
43 ; CHECK-NEXT:  entry:
44 ; CHECK-NEXT:    br label [[LOOP:%.*]]
45 ; CHECK:       loop:
46 ; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 127, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
47 ; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])
48 ; CHECK-NEXT:    [[IV_NEXT]] = add i8 [[IV]], -1
49 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 127
50 ; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
51 ; CHECK:       exit:
52 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], 1
53 ; CHECK-NEXT:    ret i8 [[TMP0]]
55 entry:
56   br label %loop
58 loop:
59   %iv = phi i8 [ 127, %entry ], [ %iv.next, %loop ]
60   call void @use(i8 zeroext %iv)
62   %iv.next = add nsw i8 %iv, -1
63   %cmp = icmp eq i8 %iv, -128
64   br i1 %cmp, label %exit, label %loop
66 exit:
67   ret i8 %iv
70 ; Comparison already in post-inc form, no need to drop nuw.
71 define i8 @already_postinc() {
72 ; CHECK-LABEL: @already_postinc(
73 ; CHECK-NEXT:  entry:
74 ; CHECK-NEXT:    br label [[LOOP:%.*]]
75 ; CHECK:       loop:
76 ; CHECK-NEXT:    [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
77 ; CHECK-NEXT:    call void @use(i8 zeroext [[IV]])
78 ; CHECK-NEXT:    [[IV_NEXT]] = add nuw i8 [[IV]], 1
79 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], -1
80 ; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
81 ; CHECK:       exit:
82 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[IV_NEXT]], -1
83 ; CHECK-NEXT:    ret i8 [[TMP0]]
85 entry:
86   br label %loop
88 loop:
89   %iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
90   call void @use(i8 zeroext %iv)
92   %iv.next = add nuw i8 %iv, 1
93   %cmp = icmp eq i8 %iv.next, -1
94   br i1 %cmp, label %exit, label %loop
96 exit:
97   ret i8 %iv