blob: da498caa6b54ed0d58f5f9f69c42203364da8529 [file] [log] [blame]
Matt Arsenault9c47dd52016-02-11 06:02:01 +00001; RUN: llc -march=amdgcn < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +00002; Make sure we don't try to form FMAX_LEGACY nodes with f64
3
Matt Arsenault9c47dd52016-02-11 06:02:01 +00004declare i32 @llvm.amdgcn.workitem.id.x() #1
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +00005
6; FUNC-LABEL: @test_fmax_legacy_uge_f64
7define void @test_fmax_legacy_uge_f64(double addrspace(1)* %out, double addrspace(1)* %in) #0 {
Matt Arsenault9c47dd52016-02-11 06:02:01 +00008 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
David Blaikie79e6c742015-02-27 19:29:02 +00009 %gep.0 = getelementptr double, double addrspace(1)* %in, i32 %tid
10 %gep.1 = getelementptr double, double addrspace(1)* %gep.0, i32 1
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000011
David Blaikiea79ac142015-02-27 21:17:42 +000012 %a = load double, double addrspace(1)* %gep.0, align 8
13 %b = load double, double addrspace(1)* %gep.1, align 8
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000014
15 %cmp = fcmp uge double %a, %b
16 %val = select i1 %cmp, double %a, double %b
17 store double %val, double addrspace(1)* %out, align 8
18 ret void
19}
20
21; FUNC-LABEL: @test_fmax_legacy_oge_f64
22define void @test_fmax_legacy_oge_f64(double addrspace(1)* %out, double addrspace(1)* %in) #0 {
Matt Arsenault9c47dd52016-02-11 06:02:01 +000023 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
David Blaikie79e6c742015-02-27 19:29:02 +000024 %gep.0 = getelementptr double, double addrspace(1)* %in, i32 %tid
25 %gep.1 = getelementptr double, double addrspace(1)* %gep.0, i32 1
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000026
David Blaikiea79ac142015-02-27 21:17:42 +000027 %a = load double, double addrspace(1)* %gep.0, align 8
28 %b = load double, double addrspace(1)* %gep.1, align 8
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000029
30 %cmp = fcmp oge double %a, %b
31 %val = select i1 %cmp, double %a, double %b
32 store double %val, double addrspace(1)* %out, align 8
33 ret void
34}
35
36; FUNC-LABEL: @test_fmax_legacy_ugt_f64
37define void @test_fmax_legacy_ugt_f64(double addrspace(1)* %out, double addrspace(1)* %in) #0 {
Matt Arsenault9c47dd52016-02-11 06:02:01 +000038 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
David Blaikie79e6c742015-02-27 19:29:02 +000039 %gep.0 = getelementptr double, double addrspace(1)* %in, i32 %tid
40 %gep.1 = getelementptr double, double addrspace(1)* %gep.0, i32 1
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000041
David Blaikiea79ac142015-02-27 21:17:42 +000042 %a = load double, double addrspace(1)* %gep.0, align 8
43 %b = load double, double addrspace(1)* %gep.1, align 8
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000044
45 %cmp = fcmp ugt double %a, %b
46 %val = select i1 %cmp, double %a, double %b
47 store double %val, double addrspace(1)* %out, align 8
48 ret void
49}
50
51; FUNC-LABEL: @test_fmax_legacy_ogt_f64
52define void @test_fmax_legacy_ogt_f64(double addrspace(1)* %out, double addrspace(1)* %in) #0 {
Matt Arsenault9c47dd52016-02-11 06:02:01 +000053 %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
David Blaikie79e6c742015-02-27 19:29:02 +000054 %gep.0 = getelementptr double, double addrspace(1)* %in, i32 %tid
55 %gep.1 = getelementptr double, double addrspace(1)* %gep.0, i32 1
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000056
David Blaikiea79ac142015-02-27 21:17:42 +000057 %a = load double, double addrspace(1)* %gep.0, align 8
58 %b = load double, double addrspace(1)* %gep.1, align 8
Matt Arsenault1e3a4eb2014-12-12 02:30:37 +000059
60 %cmp = fcmp ogt double %a, %b
61 %val = select i1 %cmp, double %a, double %b
62 store double %val, double addrspace(1)* %out, align 8
63 ret void
64}
65
66attributes #0 = { nounwind }
67attributes #1 = { nounwind readnone }