|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 |
| -; RUN: opt -S -O2 -mattr=avx < %s | FileCheck %s |
3 |
| -; RUN: opt -S -passes="default<O2>" -mattr=avx < %s | FileCheck %s |
| 2 | +; RUN: opt -S -passes="default<O2>" -mattr=avx < %s | FileCheck --check-prefix=AVX %s |
| 3 | +; RUN: opt -S -passes="default<O2>" -mattr=avx2 < %s | FileCheck --check-prefix=AVX2 %s |
4 | 4 |
|
5 | 5 | target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
6 | 6 | target triple = "x86_64-unknown-linux-gnu"
|
7 | 7 |
|
8 | 8 | ; FIXME: The br -> switch conversion blocks vectorization.
|
9 | 9 |
|
10 | 10 | define dso_local void @test(ptr %start, ptr %end) #0 {
|
11 |
| -; CHECK-LABEL: @test( |
12 |
| -; CHECK-NEXT: entry: |
13 |
| -; CHECK-NEXT: [[I11_NOT1:%.*]] = icmp eq ptr [[START:%.*]], [[END:%.*]] |
14 |
| -; CHECK-NEXT: br i1 [[I11_NOT1]], label [[EXIT:%.*]], label [[BB12:%.*]] |
15 |
| -; CHECK: bb12: |
16 |
| -; CHECK-NEXT: [[PTR2:%.*]] = phi ptr [ [[PTR_NEXT:%.*]], [[LATCH:%.*]] ], [ [[START]], [[ENTRY:%.*]] ] |
17 |
| -; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR2]], align 4 |
18 |
| -; CHECK-NEXT: switch i32 [[VAL]], label [[LATCH]] [ |
19 |
| -; CHECK-NEXT: i32 -12, label [[STORE:%.*]] |
20 |
| -; CHECK-NEXT: i32 13, label [[STORE]] |
21 |
| -; CHECK-NEXT: ] |
22 |
| -; CHECK: store: |
23 |
| -; CHECK-NEXT: store i32 42, ptr [[PTR2]], align 4 |
24 |
| -; CHECK-NEXT: br label [[LATCH]] |
25 |
| -; CHECK: latch: |
26 |
| -; CHECK-NEXT: [[PTR_NEXT]] = getelementptr inbounds i8, ptr [[PTR2]], i64 4 |
27 |
| -; CHECK-NEXT: [[I11_NOT:%.*]] = icmp eq ptr [[PTR_NEXT]], [[END]] |
28 |
| -; CHECK-NEXT: br i1 [[I11_NOT]], label [[EXIT]], label [[BB12]] |
29 |
| -; CHECK: exit: |
30 |
| -; CHECK-NEXT: ret void |
| 11 | +; AVX-LABEL: @test( |
| 12 | +; AVX-NEXT: entry: |
| 13 | +; AVX-NEXT: [[I11_NOT1:%.*]] = icmp eq ptr [[START:%.*]], [[END:%.*]] |
| 14 | +; AVX-NEXT: br i1 [[I11_NOT1]], label [[EXIT:%.*]], label [[BB12:%.*]] |
| 15 | +; AVX: bb12: |
| 16 | +; AVX-NEXT: [[PTR2:%.*]] = phi ptr [ [[PTR_NEXT:%.*]], [[LATCH:%.*]] ], [ [[START]], [[ENTRY:%.*]] ] |
| 17 | +; AVX-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR2]], align 4 |
| 18 | +; AVX-NEXT: switch i32 [[VAL]], label [[LATCH]] [ |
| 19 | +; AVX-NEXT: i32 -12, label [[STORE:%.*]] |
| 20 | +; AVX-NEXT: i32 13, label [[STORE]] |
| 21 | +; AVX-NEXT: ] |
| 22 | +; AVX: store: |
| 23 | +; AVX-NEXT: store i32 42, ptr [[PTR2]], align 4 |
| 24 | +; AVX-NEXT: br label [[LATCH]] |
| 25 | +; AVX: latch: |
| 26 | +; AVX-NEXT: [[PTR_NEXT]] = getelementptr inbounds i8, ptr [[PTR2]], i64 4 |
| 27 | +; AVX-NEXT: [[I11_NOT:%.*]] = icmp eq ptr [[PTR_NEXT]], [[END]] |
| 28 | +; AVX-NEXT: br i1 [[I11_NOT]], label [[EXIT]], label [[BB12]] |
| 29 | +; AVX: exit: |
| 30 | +; AVX-NEXT: ret void |
| 31 | +; |
| 32 | +; AVX2-LABEL: @test( |
| 33 | +; AVX2-NEXT: entry: |
| 34 | +; AVX2-NEXT: [[I11_NOT1:%.*]] = icmp eq ptr [[START:%.*]], [[END:%.*]] |
| 35 | +; AVX2-NEXT: br i1 [[I11_NOT1]], label [[EXIT:%.*]], label [[BB12:%.*]] |
| 36 | +; AVX2: bb12: |
| 37 | +; AVX2-NEXT: [[PTR2:%.*]] = phi ptr [ [[PTR_NEXT:%.*]], [[LATCH:%.*]] ], [ [[START]], [[ENTRY:%.*]] ] |
| 38 | +; AVX2-NEXT: [[VAL:%.*]] = load i32, ptr [[PTR2]], align 4 |
| 39 | +; AVX2-NEXT: switch i32 [[VAL]], label [[LATCH]] [ |
| 40 | +; AVX2-NEXT: i32 -12, label [[STORE:%.*]] |
| 41 | +; AVX2-NEXT: i32 13, label [[STORE]] |
| 42 | +; AVX2-NEXT: ] |
| 43 | +; AVX2: store: |
| 44 | +; AVX2-NEXT: store i32 42, ptr [[PTR2]], align 4 |
| 45 | +; AVX2-NEXT: br label [[LATCH]] |
| 46 | +; AVX2: latch: |
| 47 | +; AVX2-NEXT: [[PTR_NEXT]] = getelementptr inbounds i8, ptr [[PTR2]], i64 4 |
| 48 | +; AVX2-NEXT: [[I11_NOT:%.*]] = icmp eq ptr [[PTR_NEXT]], [[END]] |
| 49 | +; AVX2-NEXT: br i1 [[I11_NOT]], label [[EXIT]], label [[BB12]] |
| 50 | +; AVX2: exit: |
| 51 | +; AVX2-NEXT: ret void |
31 | 52 | ;
|
32 | 53 | entry:
|
33 | 54 | br label %header
|
|
0 commit comments