| Serguei Katkov | 4d1dd6b | 2018-01-09 04:37:06 +0000 | [diff] [blame] | 1 | ; RUN: opt -S -codegenprepare -disable-complex-addr-modes=false -addr-sink-new-select=true  %s | FileCheck %s --check-prefix=CHECK | 
|  | 2 | target datalayout = | 
|  | 3 | "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" | 
|  | 4 | target triple = "x86_64-unknown-linux-gnu" | 
|  | 5 |  | 
|  | 6 | ; Select when both offset and scale reg are present. | 
|  | 7 | define i64 @test1(i1 %c, i64* %b, i64 %scale) { | 
|  | 8 | ; CHECK-LABEL: @test1 | 
|  | 9 | entry: | 
|  | 10 | ; CHECK-LABEL: entry: | 
|  | 11 | %g = getelementptr inbounds i64, i64* %b, i64 %scale | 
|  | 12 | %g1 = getelementptr inbounds i64, i64* %g, i64 8 | 
|  | 13 | %g2 = getelementptr inbounds i64, i64* %g, i64 16 | 
|  | 14 | %s = select i1 %c, i64* %g1, i64* %g2 | 
|  | 15 | ; CHECK-NOT: sunkaddr | 
|  | 16 | %v = load i64 , i64* %s, align 8 | 
|  | 17 | ret i64 %v | 
|  | 18 | } | 
|  | 19 |  | 
| Serguei Katkov | 17e5794 | 2018-01-23 12:07:49 +0000 | [diff] [blame] | 20 | @gv1 = external global i8, align 16 | 
|  | 21 | @gv2 = external global i8, align 16 | 
|  | 22 |  | 
|  | 23 | ; Select when both GV and base reg are present. | 
|  | 24 | define i8 @test2(i1 %c, i64 %b) { | 
|  | 25 | ; CHECK-LABEL: @test2 | 
|  | 26 | entry: | 
|  | 27 | ; CHECK-LABEL: entry: | 
|  | 28 | %g1 = getelementptr inbounds i8, i8* @gv1, i64 %b | 
|  | 29 | %g2 = getelementptr inbounds i8, i8* @gv2, i64 %b | 
|  | 30 | %s = select i1 %c, i8* %g1, i8* %g2 | 
|  | 31 | ; CHECK-NOT: sunkaddr | 
|  | 32 | %v = load i8 , i8* %s, align 8 | 
|  | 33 | ret i8 %v | 
|  | 34 | } |