annotate llvm/test/Transforms/CodeGenPrepare/X86/extend-sink-hoist.ll @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children 1f2b6ac9f198
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; RUN: opt -codegenprepare -disable-cgp-branch-opts -S < %s | FileCheck %s
anatofuz
parents:
diff changeset
2 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
anatofuz
parents:
diff changeset
3 target triple = "x86_64-unknown-linux-gnu"
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 ; The first cast should be sunk into block2, in order that the
anatofuz
parents:
diff changeset
6 ; instruction selector can form an efficient
anatofuz
parents:
diff changeset
7 ; i64 * i64 -> i128 multiplication.
anatofuz
parents:
diff changeset
8 define i128 @sink(i64* %mem1, i64* %mem2) {
anatofuz
parents:
diff changeset
9 ; CHECK-LABEL: block1:
anatofuz
parents:
diff changeset
10 ; CHECK-NEXT: load
anatofuz
parents:
diff changeset
11 block1:
anatofuz
parents:
diff changeset
12 %l1 = load i64, i64* %mem1
anatofuz
parents:
diff changeset
13 %s1 = sext i64 %l1 to i128
anatofuz
parents:
diff changeset
14 br label %block2
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 ; CHECK-NEXT: sext
anatofuz
parents:
diff changeset
17 ; CHECK-NEXT: load
anatofuz
parents:
diff changeset
18 ; CHECK-NEXT: sext
anatofuz
parents:
diff changeset
19 block2:
anatofuz
parents:
diff changeset
20 %l2 = load i64, i64* %mem2
anatofuz
parents:
diff changeset
21 %s2 = sext i64 %l2 to i128
anatofuz
parents:
diff changeset
22 %res = mul i128 %s1, %s2
anatofuz
parents:
diff changeset
23 ret i128 %res
anatofuz
parents:
diff changeset
24 }
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 ; The first cast should be hoisted into block1, in order that the
anatofuz
parents:
diff changeset
27 ; instruction selector can form an extend-load.
anatofuz
parents:
diff changeset
28 define i64 @hoist(i32* %mem1, i32* %mem2) {
anatofuz
parents:
diff changeset
29 ; CHECK-LABEL: block1:
anatofuz
parents:
diff changeset
30 ; CHECK-NEXT: load
anatofuz
parents:
diff changeset
31 ; CHECK-NEXT: sext
anatofuz
parents:
diff changeset
32 block1:
anatofuz
parents:
diff changeset
33 %l1 = load i32, i32* %mem1
anatofuz
parents:
diff changeset
34 br label %block2
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 ; CHECK-NEXT: load
anatofuz
parents:
diff changeset
37 ; CHECK-NEXT: sext
anatofuz
parents:
diff changeset
38 block2:
anatofuz
parents:
diff changeset
39 %s1 = sext i32 %l1 to i64
anatofuz
parents:
diff changeset
40 %l2 = load i32, i32* %mem2
anatofuz
parents:
diff changeset
41 %s2 = sext i32 %l2 to i64
anatofuz
parents:
diff changeset
42 %res = mul i64 %s1, %s2
anatofuz
parents:
diff changeset
43 ret i64 %res
anatofuz
parents:
diff changeset
44 }
anatofuz
parents:
diff changeset
45
anatofuz
parents:
diff changeset
46 ; Make sure the cast sink logic and OptimizeExtUses don't end up in an infinite
anatofuz
parents:
diff changeset
47 ; loop.
anatofuz
parents:
diff changeset
48 define i128 @use_ext_source() {
anatofuz
parents:
diff changeset
49 block1:
anatofuz
parents:
diff changeset
50 %v1 = or i64 undef, undef
anatofuz
parents:
diff changeset
51 %v2 = zext i64 %v1 to i128
anatofuz
parents:
diff changeset
52 br i1 undef, label %block2, label %block3
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 block2:
anatofuz
parents:
diff changeset
55 %v3 = add i64 %v1, 1
anatofuz
parents:
diff changeset
56 %v4 = zext i64 %v3 to i128
anatofuz
parents:
diff changeset
57 br label %block3
anatofuz
parents:
diff changeset
58
anatofuz
parents:
diff changeset
59 block3:
anatofuz
parents:
diff changeset
60 %res = phi i128 [ %v2, %block1 ], [ %v4, %block2 ]
anatofuz
parents:
diff changeset
61 ret i128 %res
anatofuz
parents:
diff changeset
62 }